如何在SAS中选择​​任何2个或更多变量

时间:2015-04-17 18:04:50

标签: sas

我有一个问题要创建一个新变量。我有几个变量名为A,B,C,D,E,F,G.所有变量都是0/1二进制变量。所以我想创建一个新的变量显示任何3个或更多变量等于1。

例如,

new_variable =0;
if ANY 3 or more variables(A,B,C,D,E,F,G) =1 then new_variable =1;

1 个答案:

答案 0 :(得分:6)

有点像你一样做语法,但既然你很聪明并拥有0/1二进制文件,那么就非常如果你想一下这个简单的方法,看3个或更多是1。

if sum(of a b c d e f g) >= 3 then new_Variable=1;

实际上有点简单:

new_Variable = (sum(of a b c d e f g) GE 3);

as true = 1 false = 0评估布尔表达式时。

如果您的数据位于数组中或使用公共前缀,则可以更轻松地执行此操作:

new_variable = (sum(of arrayname[*]) GE 3);

new_variable = (sum(of varprefix:) GE 3);

其中arrayname是您的数组,或varprefix是您的变量(只有您的变量)共享的公共前缀。


编辑:有一种方法可以用类似的语法来实现。使用countc

data have;
 call streaminit(7);
 array vars[7] a b c d e f g;
 do _n_ = 1 to 20;
   do _i = 1 to dim(vars);
     vars[_i] = rand('Binomial',.2,1);
    end;
    output;
  end;
run;

data want;
  set have;
  if countc(cats(of a--g),'1') ge 3;
run;

如果您有1/0以外的其他内容,可以使用catx用空格或其他内容分隔它们,然后countw查找完整的值;在这里,11看起来像两个1不是十一,如果在数据中有可能的话。

顺便提一下,还有很多其他解决方案;也许其他人会来提及它们。 CALL SORTN,然后查找1的第一个实例,例如。