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

如何在SAS中选择任意2个或更多变量,sas,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; 没有一种方法可以像您那样执行语法,但是由于您很聪明,并且有0/1二进制文件,如果您想一下,有一种非常简单的方法,看看3个或更多的是1 if sum(of a

我有一个问题要创建一个新变量。我有几个变量名为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;
没有一种方法可以像您那样执行语法,但是由于您很聪明,并且有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);
当计算布尔表达式时,为true=1 false=0

如果数据位于数组中或具有公共前缀,则有一种方法可以更轻松地执行此操作:

new_variable = (sum(of arrayname[*]) 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
s而不是十一个,如果数据中可能的话

顺便说一句,还有很多其他的解决方案;也许其他人会来提及他们<代码>调用SORTN然后查找1的第一个实例,例如。

没有一种方法可以像您那样执行语法,但是由于您很聪明,并且有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);
当计算布尔表达式时,为true=1 false=0

如果数据位于数组中或具有公共前缀,则有一种方法可以更轻松地执行此操作:

new_variable = (sum(of arrayname[*]) 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
s而不是十一个,如果数据中可能的话

顺便说一句,还有很多其他的解决方案;也许其他人会来提及他们<例如,code>调用SORTN,然后查找1的第一个实例