我有一个值表,例如下面。我想获得每个贷款ID的最新行。我可以使用(OBS = 2)函数获取最新值,但不能对数据进行分组以应用每个操作。
我在网上搜索过,无法在proc sql中做循环。我也不能使用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 :(得分: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,那么我们输出记录。
答案 1 :(得分:1)
我相信当您按 date 按升序排序时,您只需要每个 loan_id 的最后一行。
PROC SORT DATA=dset1; BY loan_id date; RUN;
DATA dset2;
SET dset1;
BY loan_id;
IF LAST.loan_id;
RUN;