2016-10-21 26 views
0

我有一個值的表格,例如下面。我想獲得每個貸款ID的最新行。我可以通過使用(OBS = 2)函數獲取最新的值,但不能將數據分組以應用每個操作。將操作應用於SAS中表格中獨特的ID組?

我在網上搜索,不能做在PROC PROCEDURE循環。我也不能使用groupby,因爲這只是給我總結統計。如果有人可以推薦一種方法來嘗試,甚至可以給我一些關於如何解決這個問題的僞代碼會很好。

loan_id Date princ_amt del_status 
1  1012016 70   0 
1  2012016 60   7 
1  3012016 50   9 
1  4012016 40   9 
1  5012016 30   7 
1  6012016 20   7 
1  7012016 10   1 
1  8012016 0   0 
1  9012016 0   0 
1  10012016 0   0 
1  11012016 0   0 
1  12012016 0   0 
2  1012016 70   0 
2  2012016 60   0 
2  3012016 50   0 
2  4012016 40   1 
2  5012016 30   7 
2  6012016 20   7 
2  7012016 10   8 
2  8012016 0   0 
2  9012016 0   0 
2  10012016 0   0 
2  11012016 0   0 
2  12012016 0   0 
+0

你正在使用哪個db? – scaisEdge

回答

1

如果這是SAS,請使用數據步與by組。

data want; 
set have; 
by loan_id; 
retain cnt 0; 
if first.loan_id then 
    cnt = 0; 

cnt = cnt + 1; 

if cnt <=2 then output; 

drop cnt; 
run; 

我們通過數據循環並通過loan_id來統計觀察次數。使用retain在觀察值之間保留值cnt。如果計數小於或等於2,那麼我們輸出記錄。

+0

完美。正是我需要的。非常感謝。 –

1

我相信你只需要最後一行爲loan_id當你排序日期按升序。

PROC SORT DATA=dset1; BY loan_id date; RUN; 

DATA dset2; 
    SET dset1; 
    BY loan_id; 
    IF LAST.loan_id; 
RUN; 
+0

這很好用!有沒有什麼辦法可以將這個從最近一個月延伸到最近的六個月? –

+0

這將意味着每loan_id多行?如果是這樣,取「dset2」,並與「dset1」聯合打開a.loan_id = b.loan_id WHERE 0 LE a.date-b.date LE 180。 –