计算SAS表中行中的某些值

时间:2015-09-15 13:26:33

标签: sas

我正在尝试计算行中的某些值并且几乎不需要帮助!

我的表格看起来像这样:

data test;
input a b c d;
cards;
1 0 9 1
1 1 0 0
0 9 1 1
0 0 9 1
1 0 9 9
0 1 1 0
1 9 9 1
1 9 0 0
0 0 9 1
9 1 0 0;
run;

变量a,b,c和d的值可以是1,0或9.现在,当一行中有两个或多个值为9时,我需要创建一个值为1的新变量。我该怎么做?

3 个答案:

答案 0 :(得分:1)

你的问题需要澄清......是指一行中的两个9,或连续两个9(即连续)?

一种简单的方法是将所有值连接(使用cats())到字符串中,并使用index()函数检查“99”或count()来计算9的...

data want ;
  set have ;

  array all{*} a b c d ;

  vallist = cats(of all{*}) ;
  has99 = (index(vallist,'99') > 0) ; /* flag any two consecutive 9's */
  two9s = (count(vallist,'9') >= 2) ; /* two or more 9's */

  drop vallist ;
run ;

答案 1 :(得分:1)

这是你可以做到的一种方式。求和你的行并将其存储在一个新变量e中,如果该总和为18或更大,那么你知道必须至少有2 9个。

data test;
set test;
e = a+b+c+d;
IF e >= 18 THEN f = 1;
ELSE f = 0; 
DROP e;
run;

答案 2 :(得分:1)

试试这个:

data want;
   set test;
   flag=sum(of _all_)>=18;
run;