楼主: ywb0314
8287 17

[原创博文] 数据步中的多个观测同一个变量循环赋给宏值 [推广有奖]

11
tj0412ymy 发表于 2011-11-28 10:24:52
ywb0314 发表于 2011-11-28 09:34
原问题是这个在test.data2中,item1表示流动资产。请计算出数据中每一家分行流动   资产应获得的利息总额。 ...
FYI.
  1. data liquid;
  2. input item date mmddyy8. bank_id $;
  3. cards;
  4. 3658039 01/31/97 010100
  5. 3672391 02/20/97 010100
  6. 4952835 02/28/97 010100
  7. 4752766 03/10/97 010100
  8. 4836248 03/18/97 020200
  9. 4705987 03/31/97 020200
  10. ;
  11. run;
  12. data rate;
  13. input rate start yymmdd10. end yymmdd10.;
  14. cards;
  15. 0.000033 1996-12-311997-03-30
  16. 0.000035 1997-03-311997-04-29
  17. 0.000032 1997-04-301997-05-30
  18. ;
  19. run;

  20. proc sql;
  21. create table final as
  22. select a.bank_id,sum(a.item*b.rate) as totalrevenue
  23. from liquid a, rate b
  24. where a.date>=b.start and a.date<=b.end
  25. group by a.bank_id
  26. ;
  27. quit;
复制代码
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

12
ywb0314 发表于 2011-11-28 10:32:09
tj0412ymy 发表于 2011-11-28 10:24
FYI.
data2中的日期如果表示开始日期,而利息从开始日期到下一个开始日期前一天的这段时间计算,并且开始日期可能跨越某个利率时间段,刚才可能没说清楚。

13
soporaeternus 发表于 2011-11-28 10:43:44
我不是太理解相关业务背景,我的理解是
1如果data2是一张明细到天的状态表,那么就是流水表和start-end表连接计算的问题
2如果data2是一张到天的状态改动记录表,就是类似于两张start-end表相互连接计算的问题
这个问题我觉得使用sql会更简洁
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywb0314 + 1 + 1 + 1 十分热心的牛人

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

Let them be hard, but never unjust

14
ywb0314 发表于 2011-11-28 10:53:10
soporaeternus 发表于 2011-11-28 10:43
我不是太理解相关业务背景,我的理解是
1如果data2是一张明细到天的状态表,那么就是流水表和start-end表连 ...
多谢,我也觉得sql更简洁,我的内容如你的假设2,但我想知道有没有什么sas的好方法,先将原来的数据拆分成天,这样就可以套用你的方法了。

15
456852 发表于 2011-11-29 01:24:37
ywb0314 发表于 2011-11-28 10:53
多谢,我也觉得sql更简洁,我的内容如你的假设2,但我想知道有没有什么sas的好方法,先将原来的数据拆分成 ...
我的感觉是可以用data步解决,思路是:
1)在data2中创建start data(就是date)和end date(用lag(start date)-1).
2)用宏给每一行赋rate值.
3)计算。
这里有个问题,有没有可能start date在一个时间段,而end date却在另一个时间段?也就是说存不存在2行之间的时间差中包含2各不同的利率?

16
ywb0314 发表于 2011-11-30 09:09:10
456852 发表于 2011-11-29 01:24
我的感觉是可以用data步解决,思路是:
1)在data2中创建start data(就是date)和end date(用lag(start d ...
有一部分数据是跨利率的时间段的,我用宏尝试了下,需要不断开闭data不来扫描利率的每个时间段,效率较低,不知道你有什么好方法。

17
456852 发表于 2011-11-30 10:38:13
ywb0314 发表于 2011-11-30 09:09
有一部分数据是跨利率的时间段的,我用宏尝试了下,需要不断开闭data不来扫描利率的每个时间段,效率较低 ...
敢问假如是跨利率的,该如何计算?分段计算么?
比如2各利率段,分别是:
1月1号 - 1月15号 , 利率1%
1月15号 - 1月31号 , 利率5%

现有一笔10000块,起始日1月10号,截止日1月20号,如何计算利率?

18
ywb0314 发表于 2011-11-30 11:24:41
456852 发表于 2011-11-30 10:38
敢问假如是跨利率的,该如何计算?分段计算么?
比如2各利率段,分别是:
1月1号 - 1月15号 , 利率1%
...
我是分段计算的,但效率很低,希望你试试其他方法。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 12:06