首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除调查中包含特殊字符的重复答案

删除调查中包含特殊字符的重复答案
EN

Stack Overflow用户
提问于 2018-05-26 20:44:49
回答 2查看 69关注 0票数 1

你好,我正在处理以下问题。我有一个调查,你可以标记几个答案,以及添加您自己的答案。例如,假设我们有3个答案: a,b,c。人nr 1标记答案a,人nr 2标记答案b,c,人nr 3标记a,c。我希望收到结果:"a“标记了2次。为此,我尝试删除重复的答案,并创建一个宏变量来存储这些唯一的答案: a,b,c。

我已经将所有调查问题重命名为v1-v&n_que。其中,n_que是一个宏变量,用于保存有关调查中问题数量的信息。我试图将所有答案分成一个表(使用前面的例子,我将得到一个具有下列值的列):a,b,c,a,c。然后我想对这些数据进行排序,并删除重复的数据。我尝试过以下几种方法:

代码语言:javascript
复制
%macro coll_ans(lib, tab);
    %do _i_ = 1 %to &n_que. %by 1;
            %global betav&_i_.;

            proc sql noprint;
                    select distinct v&_i_. into :betav&_i_. separated by ', '
                            from &lib..&tab.
                                where v&_i_. ^= ' ';
            quit;

            data a&_i_.;
                %do _j_ = 1 %to %sysfunc(countw(%quote(&&&betav&_i_.), ',')) %by 1;
                    text = %scan(%quote(&&&betav&_i_), &_j_., ',');
                    output;
                %end;
            run;
    %end;
%mend coll_ans;

值得一提的是,如果有人选择了一个以上的答案,例如a和b,答案用逗号分隔,这就是为什么我选择这个分隔符来统一记录。我尝试了几乎所有的方法,将%quote更改为%bquote,%superq,写入&&而不是&,但我一直收到以下错误(其他40个错误中的第一个):

代码语言:javascript
复制
 ERROR: The function NO is unknown, or cannot be accessed.

“否”是调查中第一个问题的答案之一,完整的答案是:否(转到第九个问题)。值得一提的是,整个调查都是用波兰语进行的,但我使用了正确的编码,所以我不认为这会造成一些问题(希望如此)。

我将感谢所有的建议,因为我遇到了一堵不可逾越的墙。

EN

Stack Overflow用户

发布于 2018-05-27 06:48:51

我猜你有一个这样的数据集:

代码语言:javascript
复制
data have ;
  input id v1 : $8. v2 : $8.;
  cards ;
  1 a   a
  2 b,c b
  3 a,c c
;

您可以转置数据集,使其每个ID-variable-value有一条记录。

代码语言:javascript
复制
data tran (keep=id VarName Value);
  set have ;
  array vars{*} v1 v2 ;
  do i=1 to dim(vars) ;
    Varname=vname(vars{i}) ;
    do j=1 to countw(vars{i},',') ;  
      Value=scan(vars{i},j,',') ;
      output ;
    end ;
  end ;
run ;

输出数据集如下所示:

代码语言:javascript
复制
id    Varname    Value

 1      v1         a
 1      v2         a
 2      v1         b
 2      v1         c
 2      v2         b
 3      v1         a
 3      v1         c
 3      v2         c

您可以使用PROC FREQ或SQL来获取计数。

代码语言:javascript
复制
proc freq data=tran ;
  tables varname*value/missing list ;
run ;

输出

代码语言:javascript
复制
Varname    Value    Frequency
v1         a               2
v1         b               1
v1         c               2
v2         a               1
v2         b               1
v2         c               1
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50542911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档