2016-02-24 21 views
0

我在SAS數據集中有4列,如下面的第一張圖所示。我需要通過ID比較連續行的日期。對於每個ID,如果Date2發生在相同ID的下一行Date1之前,則保留Bill金額。如果Date2發生在下一行的Date1之後,請刪除帳單金額。因此對於每個ID,只保留Date2小於下一行Date1的賬單。我已經把結果集應該放在底部。SAS - 比較一組內的觀測值以挑選值

enter image description here

結果集應該看起來像
enter image description here

回答

1

你要創建一個移動的下一行的DATE1上一行進行比較新的變量。假設你的日期變量的日期格式,使用PROC EXPAND並作出比較,確保你不比較,這將有失蹤LEAD值的最後一個值:如果讓您對數據進行排序

DATA TEST; 
    INPUT ID: $3. DATE1: MMDDYY10. DATE2: MMDDYY10. BILL: 8.; 
    FORMAT DATE1 DATE2 MMDDYY10.; 
    DATALINES; 
    AA  07/23/2015  07/31/2015 34 
    AA  07/30/2015  08/10/2015 50 
    AA  08/12/2015  08/15/2015 18 
    BB  07/23/2015  07/24/2015 20 
    BB  07/30/2015  08/08/2015 20 
    BB  08/06/2015  08/08/2015 20 
    ; 
RUN; 

PROC EXPAND DATA = TEST OUT=TEST1 METHOD=NONE; 
    BY ID; 
    CONVERT DATE1 = DATE1_LEAD/TRANSFORMOUT=(LEAD 1); 
RUN; 

DATA TEST2; SET TEST1; 
    IF DATE1_LEAD NE . AND DATE2 GT DATE1_LEAD THEN BILL=.; 
RUN; 
+0

謝謝。這工作就像我需要它。 – Keni

1

期待以前的觀察比較你的日期,你可以在數據步驟中使用LAG Function

+0

謝謝。 LAG函數很有趣,我會研究它以進行更復雜的行比較。 – Keni