楼主: nannan0120
4155 16

请问如何滚动计算自某指定时间范围的连乘 [推广有奖]

  • 8关注
  • 0粉丝

硕士生

67%

还不是VIP/贵宾

-

威望
0
论坛币
4160 个
通用积分
1.6500
学术水平
2 点
热心指数
2 点
信用等级
0 点
经验
866 点
帖子
60
精华
0
在线时间
278 小时
注册时间
2011-7-8
最后登录
2024-9-2

楼主
nannan0120 发表于 2015-3-19 21:35:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有如下数据
iddatenum

8

2011/1/3

1

8

2011/1/4

3

8

2012/2/1

4

8

2012/6/6

6

8

2013/1/5

2

8

2014/1/4

1

11

2011/4/5

2

11

2012/3/4

2

11

2012/7/8

4

11

2014/1/2

5

22

2010/3/1

6

22

2010/7/8

7

22

2010/9/1

73

22

2011/2/1

1

22

2012/1/3

23

22

2013/1/1

5

22

2013/5/1

7
每个id的数据都是按日期排好序的,分别将每个id对应的num在日期内一年(比如第一个2011/01/03-2012/01/03)相乘,比如8在date为第一个时对应的是结果是1,8在date为第二个时对应的是3*4=12,8在date为第三个时对应的是4...以此类推,每个id分别计算,怎么编程序,求大神,数据量很大

二维码

扫码加我 拉你入群

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

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

关键词:滚动计算 date ATEN 怎么编程 ATE 如何

沙发
yongyitian 发表于 2015-3-20 10:16:08
  1. data have;
  2. input id date : yymmdd10. num;
  3. format date yymmdd10.;
  4. datalines;
  5. 8 2011/1/3 1
  6. 8 2011/1/4 3
  7. 8 2012/2/1 4
  8. 8 2012/6/6 6
  9. 8 2013/1/5 2
  10. 8 2014/1/4 1
  11. 11 2011/4/5 2
  12. 11 2012/3/4 2
  13. 11 2012/7/8 4
  14. 11 2014/1/2 5
  15. 22 2010/3/1 6
  16. 22 2010/7/8 7
  17. 22 2010/9/1 73
  18. 22 2011/2/1 1
  19. 22 2012/1/3 23
  20. 22 2013/1/1 5
  21. 22 2013/5/1 7
  22. ; run;

  23. data want;
  24.    set have;
  25.        pt = _n_;
  26.      prod = 1;
  27.      last = 0;
  28.     do until( last or pt>nobs);
  29.        set have (rename=(id=id1 date=date1 num=num1)) point=pt nobs=nobs;       
  30.         days = date1 - date;
  31.           if id = id1 and (0<= days < 365) then do;
  32.             prod = prod*num1;
  33.             pt+1; end;
  34.           else last=1;
  35.      end;
  36.     keep id date num prod;
  37. run;
  38. proc print data=want; title 'want'; run;
复制代码



Product.JPG

藤椅
nannan0120 发表于 2015-3-20 10:45:44
yongyitian 发表于 2015-3-20 10:16
谢谢,可以实现,如果id不止这么多,有很多的话,是否要在datalines里面输入全部的数据?有几百万条

板凳
yongyitian 发表于 2015-3-20 11:06:30
datalines, proc import; 都可以。

详见 Learning SAS by example, 第 1,3,6 章
https://bbs.pinggu.org/thread-3526425-1-1.html

报纸
nannan0120 发表于 2015-3-20 11:11:50
yongyitian 发表于 2015-3-20 11:06
datalines, proc import; 都可以。

详见 Learning SAS by example, 第 1,3,6 章
好的,还想请问一下,再加上一列变量ind,如果我要将该数据计算出的prod分年份,行业求平均值,应该怎么做呢?

地板
nannan0120 发表于 2015-3-20 11:11:53
yongyitian 发表于 2015-3-20 11:06
datalines, proc import; 都可以。

详见 Learning SAS by example, 第 1,3,6 章
好的,还想请问一下,再加上一列变量行业ind,如果我要将该数据计算出的prod分年份,行业求平均值,应该怎么做呢?

7
yongyitian 发表于 2015-3-20 11:23:47
nannan0120 发表于 2015-3-20 11:11
好的,还想请问一下,再加上一列变量行业ind,如果我要将该数据计算出的prod分年份,行业求平均值,应该怎 ...
proc sql;
   create table wanted_2 as
   select distinct ind, mean(prod) as mean_prod
   from want
   group by ind;
quit;

or Chapter 16 , Learning SAS by Example

8
nannan0120 发表于 2015-3-20 12:09:35
yongyitian 发表于 2015-3-20 11:23
proc sql;
   create table wanted_2 as
   select distinct ind, mean(prod) as mean_prod
谢谢!

9
nannan0120 发表于 2015-3-20 12:09:38
yongyitian 发表于 2015-3-20 11:23
proc sql;
   create table wanted_2 as
   select distinct ind, mean(prod) as mean_prod
谢谢!

10
ntsean 发表于 2015-3-21 03:02:45
you can also use sql self join

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

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