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

use*_*475 0 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;
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 6

没有办法排序办法做到像你这样的语法,而是因为你是聪明,有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的第一个实例.