我有一个问题要创建一个新变量。我有几个变量名为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 :(得分: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的第一个实例,例如。