2016-01-21 36 views
0

我有一個數據集是這樣的:如何根據其「組」將密鑰添加到行中?

a 10 
a 13 
a 14 
b 15 
b 44 
c 64 
c 32 
d 12 

我想寫一個PROC SQL語句或DATA步,將產生這樣的:

a 10 1 
a 13 1 
a 14 1 
b 15 2 
b 44 2 
c 64 3 
c 32 3 
d 12 4 

怎麼辦?

DATA TEST; 
    INPUT id $ value ; 
    DATALINES; 
a 10 
a 13 
a 14 
b 15 
b 44 
c 64 
c 32 
d 12 
; 
RUN; 

回答

2

您的數據排序如果需要的話:

proc sort data=test; 
by id; 
run; 

然後:

data want; 
set test; 
retain key; 
by id; 
if _n_ = 1 then key = 0; 
if first.id then key = key + 1; 
run; 

的保留聲明將通過迭代留住關鍵的價值。 然後,每當出現一個新的ID,我們總結1鍵。


或者由基思說,你可以使用這個簡化的數據一步做的工作:

data want; 
set test; 
by id; 
if first.id then key + 1; 
run; 

我會離開這裏兩個版本以供參考,因爲我第一個想到的是更容易理解,基斯評論中的最後一個更清晰。

+0

完美,謝謝。 –

+1

您可以在'retain'語句中設置'key'的初始值。 '保留鍵0'意味着你不需要'if _n_ = 1 then key = 0' – Longfish

+1

你也可以完全刪除'retain'語句,只需要'if first.id then key + 1'。使用'key + 1'這種方式會自動保留下一個觀察值。 – Longfish

相關問題