楼主: yingxin0824
1852 2

重赏!!!SAS 还款次数计算!!着急!!谢谢大家啦!! [推广有奖]

  • 1关注
  • 0粉丝

硕士生

21%

还不是VIP/贵宾

-

威望
0
论坛币
29630 个
通用积分
1.3500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
426 点
帖子
37
精华
0
在线时间
229 小时
注册时间
2012-2-13
最后登录
2024-4-14

250论坛币

问题如下:有4笔借款,想知道在新的借款发生时,之前已经还了多少比例?

借款排序(number)       借款日期(date)        借款期限(month)      第一次还款日期(借款1个月后) 第2次                第3次  ……
  1                                2012/12/03               3                          2013/01/03                           2013/02/03     2013/03/03
  2                                2013/03/02               6                          2013/04/02                           2013/05/02     2013/06/02                           
  3                                2013/03/29               6                          2013/04/29                           2013/05/29     2013/06/29
  4                                2013/06/03              12                         2013/07/03                           2013/08/03     2013/09/03


想要计算在每一次借款之前已经有多少还款?
例如对于2号借款:3月2日借款,此时第一笔借款已经还了两个月了,已经偿还次数为2/3
       对于3号借款:3月29日借款,此时第一笔借款已经全部还完(最后1次还款3月3日),而第二笔借款一次还没有还(因为第一次还款时间为4月2日),因此已经偿还次数为1
       对于4号借款:6月3日借款,此时第一笔借款已经全部还完,第二笔借款还了3次;第三笔借款还了2次;因此已经偿还次数为1+3/6+2/6
以此类拖
最终希望获得的格式为:

           偿还次数
  1               0         

  2             2/3
  3             1
  4            1+3/6+2/6

关键词:Number month mont date Ber SAS
沙发
co_fund 发表于 2016-3-4 09:05:31 |只看作者 |坛友微信交流群
  1. data borrow;
  2. input no date_borrow months first second third;
  3. informat date_borrow yymmdd10. first  yymmdd10. second  yymmdd10. third  yymmdd10.;
  4. format date_borrow yymmdd10. first  yymmdd10. second  yymmdd10. third  yymmdd10.;
  5. cards;
  6. 1                                2012/12/03               3                          2013/01/03                           2013/02/03     2013/03/03
  7. 2                                2013/03/02               6                          2013/04/02                           2013/05/02     2013/06/02                           
  8. 3                                2013/03/29               6                          2013/04/29                           2013/05/29     2013/06/29
  9. 4                                2013/06/03              12                         2013/07/03                           2013/08/03     2013/09/03
  10. ;
  11. run;

  12. data sort(keep=k);
  13. set borrow;
  14. format k yymmdd10.;
  15. k=first;
  16. output;
  17. k=second;
  18. output;
  19. k=third;
  20. output;
  21. run;

  22. data index;
  23. set borrow(keep=no date_borrow);
  24. run;

  25. proc sort data=sort;
  26. by k;
  27. run;

  28. proc sort data=index;
  29. by date_borrow;
  30. run;


  31. proc sql noprint;
  32. create table result as select * from sort , index;
  33. quit;
  34. proc sort data=result;
  35. by no;
  36. run;
  37. data result;
  38. set result;
  39. by no;
  40. if date_borrow>=k;
  41. run;

  42. data result;
  43. set result;
  44. by no;
  45. retain return;
  46. if first.no then return=0;
  47. return+1/3;
  48. if last.no;
  49. run;
  50. proc sort data=index;
  51. by no;
  52. run;
  53. data result(keep=no return);
  54. merge result index;
  55. by no;
  56. if return=. then return=0;
  57. run;
复制代码

使用道具

藤椅
freerunning_sky 在职认证  发表于 2016-3-4 15:37:06 |只看作者 |坛友微信交流群
  1. data input;
  2.         input idno applid loandate phases paydate1 paydate2 paydate3;
  3.         informat loandate paydate1-paydate3 yymmdd10.;
  4.         format loandate paydate1-paydate3 yymmdd10.;
  5.         cards;
  6.         1 1 2012/12/03 3 2013/01/03 2013/02/03 2013/03/03
  7.           1 2 2013/03/02 6 2013/04/02 2013/05/02 2013/06/02
  8.           1 3 2013/03/29 6 2013/04/29 2013/05/29 2013/06/29
  9.         1 4 2013/06/03 12 2013/07/03 2013/08/03 2013/09/03
  10.         ;
  11. run;

  12. data input1;
  13.         set input;
  14.         keep idno applid loandate phases paydate index;
  15.         format paydate yymmdd10.;
  16.         array pay(*) paydate1-paydate3;/*将最长期限的还款日取出来作为数组*/
  17.         paydate=loandate;
  18.         index=0;
  19.         output;
  20.         do i=1 to dim(pay);
  21.                 if pay(i)>0 then paydate=pay(i);
  22.                 index=1;
  23.                 output;
  24.         end;
  25.         proc sort;by idno paydate;
  26. run;

  27. data output;
  28.         set input1;
  29.         retain cnt 0;
  30.         if index=1 then cnt=cnt+1/phases;
  31.         if index=0;
  32.         drop index paydate;
  33. run;
复制代码
用sql写起来会更简单一些,但是效率比较低

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 22:01