2014-01-14 40 views
0

每個ID編號都有幾個與其關聯的項目。對於每個ID下的每個項目,我想給它分配一個數字。我希望每個ID的編號從1開始。我如何在SAS中做到這一點?我猜我可以使用一種循環語句。以下是我的目標的一個例子。謝謝你的幫助。

爲循環中的項分配編號 - SAS

編輯:我必須添加到這個問題的另一層。如果ID具有item = SPECIAL,我希望該記錄始終分配爲1,並讓其他項目跟隨它。

+----+----------+----------+ 
|ID |Item  |Assignment| 
+----+----------+----------+ 
|A001|SPECIAL |1   | 
+----+----------+----------+ 
|A001|Orange |2   | 
+----+----------+----------+ 
|A001|Pineapple |3   | 
+----+----------+----------+ 
|A002|Banana |1   | 
+----+----------+----------+ 
|A002|Strawberry|2   | 
+----+----------+----------+ 
|A002|Pear  |3   | 
+----+----------+----------+ 
|A002|Watermelon|4   | 
+----+----------+----------+ 
|A003|SPECIAL |1   | 
+----+----------+----------+ 
|A003|Banana |2   | 
+----+----------+----------+ 
|A003|Apple  |3   | 
+----+----------+----------+ 

回答

3

最簡單的方式做到這一點 - 與BY語句和自動變量FIRST和LAST。原始數據集應該按照ID進行排序。

data have; 
    input ID $ Item $; 

    datalines; 
A001 SPECIAL 
A001 Orange 
A001 Pineapple 
A002 Banana 
A002 Strawberry 
A002 Pear 
A002 Watermelon 
A003 SPECIAL 
A003 Banana 
A003 Apple 
; 
run; 

data want; 
    set have; 
    by ID; 
    if FIRST.ID then Assignment=1; 
    else Assignment+1; 
run; 

關於你提到的附加層:只需添加一個條件的IF語句:

`if FIRST.ID or item='SPECIAL' then Assignment=1;` 
+0

謝謝您的回答。它幾乎可以工作,但是1之後的任何數字都會丟失。你知道我能做些什麼來解決這個問題嗎? – user3023153

+0

適合我。我將添加到我的答案代碼中以生成示例源數據。是否有可能在你的真實數據中已經存在變量「賦值」,它是字符? –

+0

修正了問題。謝謝! – user3023153