我有一个问题要创建一个新变量.我有几个变量名为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;
Run Code Online (Sandbox Code Playgroud)
有没有办法排序办法做到像你这样的语法,而是因为你是聪明,有0/1的二进制文件,有一个非常简单的方法,如果你想想一个秒,看看3个或更多是1.
if sum(of a b c d e f g) >= 3 then new_Variable=1;
Run Code Online (Sandbox Code Playgroud)
实际上有点简单:
new_Variable = (sum(of a b c d e f g) GE 3);
Run Code Online (Sandbox Code Playgroud)
当您计算布尔表达式时,as true = 1 false = 0.
如果您的数据在数组中或具有公共前缀,则可以更轻松地执行此操作:
new_variable = (sum(of arrayname[*]) GE 3);
Run Code Online (Sandbox Code Playgroud)
要么
new_variable = (sum(of varprefix:) GE 3);
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
如果你有1/0以外的东西,你可以用catx空格或其他东西来划分它们,然后countw寻找完整的值; 在这里,11看起来像两个1不是十一,如果数据可能的话.
顺便提一下,还有很多其他解决方案; 也许其他人会来提及它们. CALL SORTN然后查找例如1的第一个实例.