2013-11-22 30 views
1

我對SAS相當陌生。 我設計的Excel下的算法,我有很多的麻煩將其轉換爲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

您需要利用FIRST和LAST自動變量。它們是在您使用BY時創建的。我在這裏使用NOTSORTED,因爲你實際上並不想改變所有-1的順序在一起(因爲這會破壞目的)。如果您是谷歌的「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; 
+0

謝謝! 完美工作,現在我明白如何使用SAS – Stephane