楼主: superyxo
8935 14

[问答] 用sas算一个变量在一段时间内的平均值 [推广有奖]

11
superyxo 发表于 2013-2-8 10:08:04
hamsik11 发表于 2013-2-7 17:09
写个宏,或者,对你的数据做个排序,用lag1,lag2.....lag6这样的函数来实现,然后再进行筛选
还是不太懂,不过谢谢了!

12
superyxo 发表于 2013-2-8 10:13:06
playmore 发表于 2013-2-7 16:48
你的要求类似于求股票价格的移动平均值
那里需要控制固定的步长,即lag,如前15个交易日
可以用SAS的 ...
这个目测可以!不过用例子里的BegT和EndT,2010年1月1到2012年12月31,这么算下来会产生730个表格吧?硬盘会不会装不下额。。。。。我还有不到15个G的空间

13
superyxo 发表于 2013-2-9 07:33:28
playmore 发表于 2013-2-7 16:48
你的要求类似于求股票价格的移动平均值
那里需要控制固定的步长,即lag,如前15个交易日
可以用SAS的 ...
多谢大牛的提示,按大牛的程序稍稍改了一下就ok了:
facilitystartdate是贷款时间:
  1. %macro avg_interest;
  2. %let begdate=11323; *('1Jan1991'd);
  3. %let enddate=19359; *('1Jan2013'd);

  4. /*******set log to temp file*****/
  5. filename templog "D:\SASlib\templog.txt";
  6. proc printto log=templog;
  7. run;
  8. /*******************************/
  9. %do i= &begdate %to  &enddate;
  10. proc means data=interest2(where=(facilitystartdate le &i and facilitystartdate ge intnx('month',&i,-6))) mean noprint;
  11. output out=want_&i mean=avg_int6;
  12. var allindrawn; *allindrawn=interest;
  13. run;
  14. data want_&i;
  15. set want_&i;
  16. format facilitystartdate mmddyy10.;
  17. facilitystartdate=&i;
  18. run;
  19. %end;
  20. /**reset log output***/
  21. proc printto;
  22. run;
  23. /********************/
  24. data avg_interest;
  25. set want_&begdate-want_&enddate;
  26. drop _type_ _freq_;
  27. run;
  28. proc datasets lib=work nolist;
  29. delete want_&begdate-want_&enddate;
  30. quit;
  31. run;
  32. %mend avg_interest;

  33. %avg_interest;
复制代码


14
playmore 发表于 2013-2-9 16:10:48
superyxo 发表于 2013-2-8 10:07
这种办法好像只能用于固定的interval?我要做的好像不太一样。比方说,我要算2012年12月31之前的六个月的 ...
对,他说的方法是计算移动平均的一种算法,适合步长固定的情形
你这种不定的,还真是没有好办法
当然也可以用他的办法,但是要加一列步长变量
记录不同日期间隔内的样本数据量
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
superyxo + 1 + 1 + 1 热心帮助其他会员

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

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

15
chenys625 发表于 2013-2-16 09:42:05
superyxo 发表于 2013-2-8 10:07
这种办法好像只能用于固定的interval?我要做的好像不太一样。比方说,我要算2012年12月31之前的六个月的 ...
恩 明白你的意思。这样的话也很容易,在你每个计算周期做个标记就行了,在我那程序上稍微改改就可以了。我现在等于是用interval=3做到标记。

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

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