楼主: akalius
736 3

[学习分享] 请问如何延展日期跟变量取值 [推广有奖]

  • 10关注
  • 3粉丝

讲师

48%

还不是VIP/贵宾

-

威望
0
论坛币
4168 个
通用积分
9.1543
学术水平
4 点
热心指数
6 点
信用等级
6 点
经验
7832 点
帖子
261
精华
0
在线时间
605 小时
注册时间
2009-7-22
最后登录
2024-4-9

楼主
akalius 学生认证  发表于 2018-4-19 11:41:09 |只看作者 |坛友微信交流群|倒序 |AI写论文
200论坛币
Stkcddatesumx

1

2014/1/4

3

1

2014/3/6

9

2

2015/7/1

4

2

2015/8/6

2




如以上,现在要将日期扩展到一年的所有天数,即加观测,终止日为2015/12/31。即对于stkcd 1  , 将2014/1/4到2014/3/5的sumxx全部为3,2014/3/6到2015/12/31的sumxx全部为9。stkcd 2情况一样。  有好多个stkcd的。
关键词:stkcd Dates esum date STK
沙发
l1i2n3i4n5g 在职认证  发表于 2018-4-19 11:41:10 |只看作者 |坛友微信交流群
  1. data test;
  2. retain Stkcd date sumx;
  3. format date yymmdds10.;
  4. input Stkcd / date yymmdd10.        / sumx;
  5. cards;
  6. 1
  7. 2014/1/4
  8. 3
  9. 1
  10. 2014/3/6
  11. 9
  12. 2
  13. 2015/7/1
  14. 4
  15. 2
  16. 2015/8/6
  17. 2
  18. ;
  19. run;

  20. proc timeseries data=test out=want;
  21.    by stkcd;
  22.    id date interval=day accumulate=average
  23.    format=yymmdd10.
  24.    setmissing=previous
  25.    start='01jan2014'd
  26.    end='31dec2015'd;
  27.    var sumx;
  28. run;
复制代码

使用道具

藤椅
Tigflanker 发表于 2018-4-19 14:01:30 |只看作者 |坛友微信交流群
  1. data have;
  2. input Stkcd date:yymmdd10.  sumx;
  3. format date yymmdd10.;
  4. cards;
  5. 1 2015/12/20 3
  6. 1 2015/12/28 9
  7. 2 2015/12/21 4
  8. 2 2015/12/25 5
  9. 2 2015/12/28 2
  10. ;run;

  11. data want(drop = x_:);
  12.   set have end = last;
  13.   main_point = _n_ + 1;

  14.   if ~last then set have(rename = (date = x_date stkcd = x_stkcd) drop = sumx) point = main_point;

  15.   retain stkcd sumx;
  16.   do while((stkcd = x_stkcd and date < x_date) or ((stkcd ~= x_stkcd or last) and date <= '31Dec2015'd));
  17.         output;
  18.     date + 1;
  19.   end;
  20. run;
复制代码
是这逻辑么?

使用道具

板凳
Tigflanker 发表于 2018-4-19 14:02:30 |只看作者 |坛友微信交流群
  1. data have;
  2. input Stkcd date:yymmdd10.  sumx;
  3. format date yymmdd10.;
  4. cards;
  5. 1 2015/12/20 3
  6. 1 2015/12/28 9
  7. 2 2015/12/21 4
  8. 2 2015/12/25 5
  9. 2 2015/12/28 2
  10. ;run;

  11. data want(drop = x_:);
  12.   set have end = last;
  13.   main_point = _n_ + 1;

  14.   if ~last then set have(rename = (date = x_date stkcd = x_stkcd) drop = sumx) point = main_point;

  15.   retain stkcd sumx;
  16.   do while((stkcd = x_stkcd and date < x_date) or ((stkcd ~= x_stkcd or last) and date <= '31Dec2015'd));
  17.         output;
  18.     date + 1;
  19.   end;
  20. run;
复制代码
是这逻辑么?

使用道具

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

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

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

GMT+8, 2024-4-20 06:21