2012-03-11 31 views
0

免責聲明:這是功課。如何將等級應用於SAS中的子羣?

我有一個SAS數據集:

ID VAL YEAR 

我通過YEAR

所以需要將它們分成10組,在我的情況歲月1980年到2000年,每年有許多行。

如果我想排名整套我會做這樣的:

proc rank groups=10 data=foo out=bar; 
var val; ranks s1; run; 

但是,這並不由今年將它們分開。所以,我試圖把它變成一個DO循環和APPEND每年的排名數據是這樣的:

do i=0 to 20; 
data z; set l; 
if year = 1980 + i; 
keep id year val; 
run; 

proc append base=l data=z; 
run; 
end; 
run; 

但它不承認i作爲一個變量,它不附加任何數據。 有什麼想法?

+1

既然您聲明這是作業,您可能想了解爲什麼您的DO循環代碼不起作用。 DO/TO - END是特定於DATA STEP的代碼。對於您的示例,您將需要使用MACRO邏輯,例如%DO /%TO - %END。此外,「1980 + i」將需要更改爲「1980 +&i」。最後,所有這些都需要在宏定義中編寫。羅比提供的答案效率更高,但很高興看到您也在考慮其他選項。 – RWill 2012-03-13 15:50:46

回答

2

不確定這是否正是你想要的。如果您想通過變量來執行rank,只需說明proc rankby聲明。還要確保數據集在執行之前按年排序。

proc rank groups=10 data=foo out=bar; 
var val; 
ranks s1; 
by year; 
run; 
+0

我認爲這只是排名不分年份。如果我排名只有一年,其結果是不同的 – Matthew 2012-03-11 17:01:28

+0

我剛剛證實,你的方法不起作用。無論年份如何,它都按val排名。 – Matthew 2012-03-11 23:04:34

+0

請提供一個數據示例,描述原始數據和轉換後的數據。 ''by'聲明將在每個小組中進行排名。所以我不明白你說它忽略了「年」。 – 2012-03-11 23:26:37

相關問題