楼主: 王者归来14
7004 9

SAS分组求移动平均值 [推广有奖]

  • 1关注
  • 0粉丝

大专生

70%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
815 点
帖子
30
精华
0
在线时间
82 小时
注册时间
2012-8-15
最后登录
2019-4-11

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据集(data)概貌:
代码(id)  日期(Tradate)  成交量(Volume)  换手率(Rate)
000001        2011-01-01         1000                      1
000001        2011-01-02          200                      0.5
                                     .
                                     .
600000        2011-01-01           500                     0.1
600000        2011-01-02          3000                    0.3

data test;
set data;
if id='000001' then output;
run;
proc sort data=test;
run;
%macro test3;
data test1;
set test;
by id tradate;
array Tavg(30);
array Hrate(30);
Tavg1=Volume;
Hrate1=Rate;
%do i=2 %to 30;
           Tavg(&i.)=lag(Tavg(&i.-1));
          Hrate(&i.)=lag(Hrate(&i.-1));
%end;
/*求10、20、30天的成交量及换手率移动平均值*/
%do j=10 %to 30 %by 10;
           Avg_T&j.=round(mean(of Tavg1-Tavg&j.),1);
           Avg_H&j.=round(mean(of Hrate1-Hrate&j.),0.01);
%end;
run;
%mend test3;
%test3;
-------------------------------------------------------
问题:对求单ID=‘000001’对应的移动平均值会求,但不会对ID等于多值时进行批量处理(即,根据ID进行分组球Volume及Rate的移动平均值),请各位大虾指导,谢谢!



二维码

扫码加我 拉你入群

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

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

关键词:移动平均值 移动平均 平均值 volume output 换手率 平均值 成交量

沙发
420948492 发表于 2014-8-15 17:32:05 |只看作者 |坛友微信交流群
上传一份样例数据一试

使用道具

藤椅
王者归来14 发表于 2014-8-15 17:44:03 |只看作者 |坛友微信交流群
420948492 发表于 2014-8-15 17:32
上传一份样例数据一试
附件为样本数据,拜托了

data.txt

31.49 KB

使用道具

板凳
王者归来14 发表于 2014-8-15 17:47:00 |只看作者 |坛友微信交流群
420948492 发表于 2014-8-15 17:32
上传一份样例数据一试
如果把其中lag好的数据,在置成“.”是可以,但是效率低,同时增加代码了,非常不可取

使用道具

报纸
gongxun1234 发表于 2014-8-16 01:34:12 |只看作者 |坛友微信交流群
%macro m();
data test4;
set test1;
by id tradate;
if first.id  then do;
n=1;
sum_var=volumn;
end;
else do;
n+1;
sum_var+volumn;
end;
%do inn=10 %to 30 %by 10;
lag&inn._sum=lag&inn.(sum_var);
if n<= &inn. then do ;
mean_var&inn.=round(sum_var/n,1);end;
else do;
mean_var&inn.=round((sum_var-lag&inn._sum)/&inn.,1);
end;
%end;
drop sum_var: lag:;
run;
%mend;
%m();
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
薯条好吃吗 + 1 + 1 + 1 精彩帖子
王者归来14 + 1 + 1 热心帮助其他会员

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

使用道具

地板
420948492 发表于 2014-8-16 12:11:03 |只看作者 |坛友微信交流群
王者归来14 发表于 2014-8-15 17:44
附件为样本数据,拜托了
  1. data data;
  2. infile "E:\data.txt"  dlm='09'X firstobs=2;
  3. input id :$10. Tradate YYMMDD10. Volume rate;
  4. format tradate YYMMDD10.;
  5. run;

  6. options mprint mlogic;
  7. %macro test3(id);
  8. data test;
  9. set data;
  10. if id=&id. then output;
  11. run;
  12. proc sort data=test;
  13. by id tradate;
  14. run;
  15. data test1;
  16. set test;
  17. by id tradate;
  18. array Tavg(30);
  19. array Hrate(30);
  20. Tavg1=Volume;
  21. Hrate1=Rate;
  22. %do i=2 %to 30;
  23. Tavg(&i.)=lag(Tavg(&i.-1));
  24. Hrate(&i.)=lag(Hrate(&i.-1));
  25. %end;
  26. /*求10、20、30天的成交量及换手率移动平均值*/
  27. %do j=10 %to 30 %by 10;
  28. Avg_T&j.=round(mean(of Tavg1-Tavg&j.),1);
  29. Avg_H&j.=round(mean(of Hrate1-Hrate&j.),0.01);
  30. %end;
  31. run;
  32. proc append base=enddata data=test1 force;
  33. run;
  34. %mend test3;

  35. proc sql noprint;
  36. select count(distinct id) into:nid  from data;
  37. create table did as
  38. select distinct id  from data;
  39. quit;

  40. data _null_;
  41. set did;
  42. call symput("id_"||left(_n_),id);
  43. run;
  44. %macro dataend;
  45. %do m=1 %to %eval(&nid.);
  46. %test3(&&id_&m.);
  47. %end;
  48. run;
  49. %mend;

  50. %dataend;
复制代码


已有 1 人评分学术水平 热心指数 收起 理由
王者归来14 + 1 + 1 热心帮助其他会员

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

有人的地方就有江湖

使用道具

7
王者归来14 发表于 2014-8-16 17:11:49 |只看作者 |坛友微信交流群
gongxun1234 发表于 2014-8-16 01:34
%macro m();
data test4;
set test1;
你好,非常感谢你的回复,看了你的代码,获益匪浅,我平时用惯了数组,产生很多不必要的变量,呵呵风格180度转变了要。

使用道具

8
王者归来14 发表于 2014-8-16 17:24:10 |只看作者 |坛友微信交流群
420948492 发表于 2014-8-16 12:11
感谢你的回复,从中又学到了不少

使用道具

9
jiangpinggu 发表于 2014-8-17 11:12:46 |只看作者 |坛友微信交流群
建议,最好用proc expand。

使用道具

10
mengha 发表于 2016-2-5 11:15:30 |只看作者 |坛友微信交流群
学习一下~

使用道具

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

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

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

GMT+8, 2024-4-27 23:18