我对SAS很新。 我在excel下设计了一个算法,我在将它转换为SAS时遇到了很多麻烦
在Excel中:
A B
-1 1
1 .
1 2
0 1
-1 .
-1 2
从A到B的作用是它计算连续发现A的次数。例如(-1)只在这里一次,所以1.然后1,1,我跟着彼此。 (=不重要)后跟2(因为你有两个1)。 等等。 我在B列的excel代码是: 第一行:
IF (A1 = A2, NA(), 1)
对于B列的其余部分(例如第10行):
IF(A10 = A11, NA(), COUNTIF($A$1:A9,"="&NA()) + COUNT ($A$1:A9) + 1 - SUMIF($A$1:A9,"<>#N/A"))
代码确实有效,但我真的找不到SAS中的COUNTIF,SUMIF和COUNT ....
到目前为止,这是我的代码
data test;
input sign;
cards;
-1
1
1
0
-1
-1
;
run;
*create a lead for the equality IF
proc expand data=test out=test2;
convert sign= sign_lead / transformout = (lead 1);
quit;
感谢您的帮助!
答案 0 :(得分:0)
您需要利用FIRST和LAST自动变量。它们是在您使用BY时创建的。我在这里使用NOTSORTED,因为你实际上并不想改变所有-1s在一起的顺序(因为这会破坏目的)。如果你谷歌“FIRST LAST Variable SAS”,这在各种论文中都有很好的介绍。
data test;
input sign;
cards;
-1
1
1
0
-1
-1
;
run;
data want;
set test;
by sign notsorted;
if first.sign then _tempcounter=0;
_tempcounter+1;
if last.sign then b=_tempcounter;
drop _tempcounter;
run;
proc print data=want;
run;