将操作应用于SAS中表中的唯一ID组?

时间:2016-10-21 20:59:29

标签: sql group-by sas

我有一个值表,例如下面。我想获得每个贷款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

2 个答案:

答案 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;