楼主: 白塔湖123
3152 7

[问答] 请问一下sas如何计算过去12个月的最大值? [推广有奖]

  • 2关注
  • 6粉丝

已卖:2138份资源

教授

1%

还不是VIP/贵宾

-

威望
0
论坛币
22330 个
通用积分
2.8031
学术水平
3 点
热心指数
20 点
信用等级
3 点
经验
5284 点
帖子
286
精华
0
在线时间
1683 小时
注册时间
2012-9-20
最后登录
2025-11-21

楼主
白塔湖123 发表于 2017-6-29 14:56:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
11111.png
大家好,我遇到一个问题。

就是我现在的数据集如图所示,我想生成一个变量max,比如1995-06这行,对应的max代表过去12个月,也就是1994-06至1995-06这段时间内股价clsprc的最大值,这个程序该如何编写呢?

非常感谢!

可以支付论坛币~求解答
二维码

扫码加我 拉你入群

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

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

关键词:最大值 如图所示 非常感谢 max 求解答

回帖推荐

已有 1 人评分经验 收起 理由
eijuhz + 20 鼓励积极发帖讨论

总评分: 经验 + 20   查看全部评分

沙发
孤单的我们 发表于 2017-6-29 17:26:04
proc sql noprint;
create table want as
select distinct stkcd,trdmnt,max(clspcr) as max from dataset group by stkcd,trdmnt;
quit;

藤椅
白塔湖123 发表于 2017-6-29 17:34:23
您好,可是您这样得到的是每个月的最大值吧?我想要的是过去12个月的最大值~

板凳
大片阳光因你 发表于 2017-6-29 23:09:10
  1. data a1;
  2. informat Trddt e8601da.;
  3. format Trddt date9.;
  4. input Stkcd Trddt Clsprc trdmnt $;
  5. datalines;
  6. 000001 1991-04-03 49 1991-04
  7. 000001 1991-05-03 48.76 1991-05
  8. 000001 1991-06-03 48.52 1991-06
  9. 000001 1991-07-03 48.29 1991-07
  10. 000001 1991-08-03 48.04 1991-08
  11. 000001 1991-09-03 47.8 1991-09
  12. 000001 1991-10-03 47.56 1991-10
  13. 000001 1991-11-03 47.08 1991-11
  14. 000001 1991-12-03 46.84 1991-12
  15. 000001 1992-01-03 46.38 1992-01
  16. 000001 1992-02-03 46.15 1992-02
  17. 000001 1992-03-03 45.92 1992-03
  18. 000001 1992-04-03 45.69 1992-04
  19. 000001 1992-05-03 45.46 1992-05
  20. 000001 1992-06-03 45 1992-06
  21. 000001 1992-07-03 44.78 1992-07
  22. 000001 1992-08-03 44.56 1992-08
  23. 000001 1992-09-03 44.34 1992-09
  24. 000001 1992-10-03 43.9 1992-10
  25. 000001 1992-11-03 43.68 1992-11
  26. 000001 1992-12-03 43.46 1992-12
  27. 000001 1993-01-03 43.24 1993-01
  28. ;
  29. run;
  30. proc sql;
  31. create table rolling_max as
  32. select Stkcd, Trddt, trdmnt, Clsprc, max(temp) as rolling
  33. from (
  34.         select a.*, b.Clsprc as temp
  35.         from a1 a left join a1 b
  36.         on a.Stkcd=b.Stkcd
  37.         and a.Trddt-366<=b.Trddt<=a.Trddt
  38.         )
  39. group by Stkcd, Trddt, trdmnt, Clsprc;
  40. quit;
复制代码

报纸
白塔湖123 发表于 2017-6-30 00:22:30
大片阳光因你 发表于 2017-6-29 23:09
非常感谢您!

地板
大片阳光因你 发表于 2017-6-30 05:33:43
白塔湖123 发表于 2017-6-30 00:22
非常感谢您!
不客气……这是proc sql的经典套路
366换成30的话就是过去30天的最大值

366是包括去年的今天 改成365就是不包过去年的今天

7
learsaas 发表于 2017-6-30 09:05:10
方法一:datastep by lag
方法二:proc expand

8
kk2976 发表于 2019-9-8 00:08:04 来自手机
大片阳光因你 发表于 2017-6-29 23:09
你好 为什么我看不到代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-20 22:07