如何在SAS中选择任意2个或更多变量
我有一个问题要创建一个新变量。我有几个变量名为a、B、C、D、E、F、G。所有变量都是0/1二进制变量。所以我想创建一个新变量,它显示任何3个或更多等于1的变量 比如说,如何在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
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的第一个实例