我正在尝试计算行中的某些值并且几乎不需要帮助!
我的表格看起来像这样:
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的新变量。我该怎么做?
答案 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;