楼主: 1440724683
969 2

[问答] SAS求和中的问题 [推广有奖]

  • 0关注
  • 0粉丝

初中生

38%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
100 点
帖子
1
精华
0
在线时间
28 小时
注册时间
2020-12-15
最后登录
2022-3-30

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
新手请教,sas中如果想要算一个一组数的求和,怎么打代码呢?比如date6这一行,sum的值要的是date 1-5中r的求和,date7里面要的是date2-6的求和,而且要区分stock的话,应该怎么处理?
QQ图片20140125171105.png

二维码

扫码加我 拉你入群

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

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

关键词:Stock date tock stoc 怎么处理 论坛 SAS sas 求助

我感觉写的比较繁琐,应该有简单的方法吧。

data have;
        date=10;stock=1;r=0.11;output ;
        date=1;stock=1;r=0.11;output ;
        date=2;stock=1;r=0.22;output ;
        date=3;stock=1;r=0.33;output ;
        date=4;stock=1;r=0.44;output ;
        date=5;stock=1;r=0.55;output ;
        date=6;stock=1;r=0.66;output ;
        date=7;stock=1;r=0.77;output ;
        date=8;stock=1;r=0.88;output ;
        date=9;stock=1;r=0.99;output ;

        date=1;stock=2;r=0.11;output ;
        date=2;stock=2;r=0.22;output ;
        date=3;stock=2;r=0.33;output ;
        date=4;stock=2;r=0.44;output ;
        date=5;stock=2;r=0.55;output ;
        date=6;stock=2;r=0.66;output ;
        date=7;stock=2;r=0.11;output ;
        date=8;stock=2;r=0.11;output ;
        date=9;stock=2;r=0.11;output ;
        date=10;stock=2;r=0.11;output ;
run;

proc sort data=work.have;by stock date;run;
data want;
        retain begin_stock;
        set have;
        by stock date;
        if first.stock then begin_stock=_n_;
        nobs+1;
        begins = max(nobs - 6,begin_stock);
        ends = _n_ - 1;
        r_new =.;
        do i=begins to ends;
                set have(keep=r rename=(r=rr)) point=i;
                r_new+rr;
        end;

        drop nobs begins ends rr;
run;

人大2.png (115.63 KB)

人大2.png

使用道具

藤椅
Rock2000 发表于 2021-1-13 08:45:00 |只看作者 |坛友微信交流群
我采用LAGn()函数及纵向相加功能实现。

程序Code如下

  1. data test;
  2. input date stock r @@;
  3. cards;
  4. 1 1 0.11
  5. 2 1 0.05
  6. 3 1 0.12
  7. 4 1 0.14
  8. 5 1 0.08
  9. 6 1 0.06
  10. 7 1 0.05
  11. 1 2 0.21
  12. 2 2 0.24
  13. 3 2 0.21
  14. 4 2 0.14
  15. 5 2 0.11
  16. 6 2 0.09
  17. 7 2 0.06
  18. ;

  19. proc sort data=test; by stock date; run;

  20. data result;
  21. set test;
  22. date6=lag6(r);
  23. by stock;
  24. if first.stock then sum=.;
  25. sum+r;
  26. if date=7 then sum=sum-date6;
  27. drop date6
  28. run;

  29. data result; set result;
  30. if 1<=date<6 then  sum=.;
  31. run;

  32. proc print data=result; run;
复制代码


2021-01-13_8-46-28.png


使用道具

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

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

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

GMT+8, 2024-4-30 19:41