2012-11-30 174 views
0

我有一個面板數據集,需要根據(Year,LoadPort,DischargePort)的唯一組合爲變量組創建一個ID。我希望在數據集中保留其他變量,但不需要識別組。例如:如何將一個ID分配給一組變量

Year LoadPort DischargePort ID 
2007 ARZEW  LOOP TERMINAL 1 
2008 ARZEW  LOOP TERMINAL 1 
2011 RAS TANURA ZHONGSHAN 2 
2010 RAS TANURA ZHONGSHAN 2 

我需要創建最後一列。這是我曾嘗試過,但它給了我無稽之談的結果:

proc sort data=data.benchmark5; 
by loadport dischargeport year; 
run; 

data data.benchmark6; 
    set data.benchmark5; 
    retain ID; 
    by loadport dischargeport year; 
    if first.year then ID = 0; 
    ID = ID + 1; 
    run; 

回答

0

這會給你的ID作爲您的示例顯示。

data data.benchmark6; 
set data.benchmark5; 
    if loadport^=lag(loadport) or DischargePort^=lag(DischargePort) then ID+1; 
    else ID+0; 
run; 
+0

這工作,非常感謝你! – Sassafras

1

你非常接近;只是僅增加對first.year您的ID變量:

data data.benchmark6; 
    set data.benchmark5; 
     by loadport dischargeport year; 
    retain ID 0; 
    if first.year then ID = ID + 1; 
run; 
+0

'如果first.year then'應該是'if first.year and first.loadport and first.dischargeport then'。 –

+0

@RobbieLiu我不這麼認爲。 OP要求所有三個變量的獨特組合。但是,該示例與該語句不匹配,因此可能應該是'if first.dischargeport'。 – BellevueBob

+0

我認爲OP可能在描述它時犯了一個錯誤,因爲給出的示例基於兩列。也許你是對的。 –

相關問題