如何在SAS中计算还款计划最后一行的new_outstanding字段
SAS还款计划未偿金额计算修正
原代码的问题
by perm_id语句末尾缺少分号,SAS会直接报错- 使用
_n_=1仅在整个数据集第一行初始化余额,但实际需要按perm_id分组,每个客户的第一行都得单独初始化 - 未将计算结果赋值给目标字段
new_outstanding - 未做分组隔离,不同客户的还款数据会混在一起计算
修正后的代码
data want; set have; by perm_id; /* 每个客户的第一笔记录,把total作为初始未偿金额 */ if first.perm_id then remainder = total; /* 累加计算:用上一行的未偿金额减去当前还款额 */ remainder + (-num); /* 把计算结果赋值给目标字段new_outstanding */ new_outstanding = remainder; /* 如果只需要每个客户最后一行的未偿金额,解开下面这行注释 */ /* if last.perm_id then output; */ run;
关键说明
by perm_id:按客户ID分组,保证每个客户的还款计划单独计算,不会和其他客户的数据串在一起first.perm_id:精准定位每个客户的第一笔记录,初始化未偿金额为该客户的总欠款totalremainder + (-num):SAS的累加语句,自动保留分组内上一行的remainder值,等价于remainder = remainder - num,写法更简洁- 要是只需要每个客户最后一期的未偿金额,把
if last.perm_id then output;的注释去掉,就只会输出每个分组的最后一行
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

