将EXCEL代码转换为SAS

将EXCEL代码转换为SAS,excel,count,sum,sas,Excel,Count,Sum,Sas,我是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行): 谢谢你的帮助 您需要利用第一个和

我是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行):


谢谢你的帮助

您需要利用第一个和最后一个自动变量。它们是在您使用时创建的。我在这里使用NOTSORTED,因为您实际上不想更改所有-1在一起的顺序(因为这样做会破坏目的)。如果你用谷歌搜索“FIRST-LAST-Variable SAS”,各种各样的文章都会很好地介绍这一点


谢谢!工作完美,现在我更了解如何使用SAS
IF(A10 = A11, NA(), COUNTIF($A$1:A9,"="&NA()) + COUNT ($A$1:A9) + 1 - SUMIF($A$1:A9,"<>#N/A"))
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;
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;