You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:精准定位每个客户的第一笔记录,初始化未偿金额为该客户的总欠款total
  • remainder + (-num):SAS的累加语句,自动保留分组内上一行的remainder值,等价于remainder = remainder - num,写法更简洁
  • 要是只需要每个客户最后一期的未偿金额,把if last.perm_id then output;的注释去掉,就只会输出每个分组的最后一行

内容的提问来源于stack exchange,提问作者Seb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:12:28