全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2363 9
2013-07-11
如何递归计算银行这样的数据,谢谢。

例如:银行持借记卡人的交易明细数据
name transaction_index month   balance
张三 123456789         201101  100
张三 223456789         201102  200
张三 323456789         201103  300
张三 423456789         201104  400
张三 523456789         201105  500
张三 623456789         201103  600
李四 12345678         201201  1000
李四 22345678         201202  2000
李四 32345678         201205  3000
李四 42345678         201106  4000
李四 52345678         201108  5000

想要得到的结果是  计算每一笔交易对应的过去三月的余额总和
最终是这样的结果
name transaction_index month   balance  last3mth_bal_sum
张三 123456789         201101  100      100
张三 223456789         201102  250      100
张三 323456789         201103  300      100+250
张三 423456789         201104  400      100+250+300
张三 523456789         201105  500      250+300+400
张三 623456789         201106  600      300+400+500
李四 12345678           201201  1000      1000
李四 22345678           201202  2500      1000
李四 32345678           201205  3000      2500
李四 42345678           201106  4000      3000
李四 52345678           201108  5000      3000+4000

计算时要考虑和他相邻的前三个月的数据。谢谢各位达人。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-7-11 10:40:40
data b;
        set a;
        by name;
        retain last3;
        if first.name  THEN last3=balance;
        else last3+balance;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-11 11:48:20
提示: 作者被禁止或删除 内容自动屏蔽
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-11 12:47:43
谢谢楼上2位,2楼的是算累加。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-11 12:59:38
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-11 13:27:17
data a;
input name : $ transaction_index : $10. month : $6. balance ;
cards;
A 123456789         201101  100      
A 223456789         201102  250      
A 323456789         201103  300      
A 423456789         201104  400      
A 523456789         201105  500      
A 623456789         201106  600      
B 12345678           201201  1000     
B 22345678           201202  2500     
B 32345678           201205  3000     
B 42345678           201206  4000     
B 52345678           201208  5000     
;


data b;
   set a;
   by name month;
   month_n=substr(month,1,4)*12+substr(month,5,2);
   last3mth_bal_sum=sum((lag(balance)*(dif(month_n)<=3))
                         ,(lag2(balance)*(dif2(month_n)<=3))
                                         ,(lag3(balance)*(dif3(month_n)<=3)));
   if first.name then last3mth_bal_sum=balance;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群