楼主: sunset1986
14346 13

[原创博文] 如何实现累加功能 [推广有奖]

  • 4关注
  • 23粉丝

院士

16%

还不是VIP/贵宾

-

威望
1
论坛币
1505 个
通用积分
0.1258
学术水平
42 点
热心指数
49 点
信用等级
23 点
经验
31953 点
帖子
2520
精华
0
在线时间
715 小时
注册时间
2012-2-6
最后登录
2014-5-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大虾,想请教一下是否那位知道如何用SAS实现累加功能:              Overdue amt (单月数量)
201101    100
201102    200
201103    300
201104    400
201105    500


我想通过某种sas code实现添加一个新变量,也就是一个累积变量,使数据变成:

              Overdue amt (单月数量)  YTD Overdue amt (累积数量)
201101    100                                      100
201102    200                                      300
201103    300                                      600
201104    400                                      1,000
201105    500                                      1,500



试过很多方法,但都没有成功,自己感觉可能array可以实现,但是呢,终究没有研究出来,请各位指教,多谢咯~

二维码

扫码加我 拉你入群

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

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

关键词:如何实现 array Over code Ver 如何

回帖推荐

本帖被以下文库推荐

沙发
wh_wing 发表于 2012-2-15 23:02:30 |只看作者 |坛友微信交流群
  1. data a;
  2. input time $ oa ;
  3. cards;
  4. 201101    100
  5. 201102    200
  6. 201103    300
  7. 201104    400
  8. 201105    500
  9. ;
  10. data b;
  11. set a;
  12. cumoa+oa;
  13. format cumoa comma.;
  14. run;
  15. proc print data=b;run;
复制代码

使用道具

藤椅
sunset1986 发表于 2012-2-16 09:53:47 |只看作者 |坛友微信交流群
wh_wing 发表于 2012-2-15 23:02
非常感谢,还想请教您一下:这个cumoa是一个函数是么?那如果我的变量名字是od,那么累积的得语句可以变为:cumod+od么?
另外,这个cumoa是否可以做一个逻辑判别呢,也就是说,让2011和2010年的数据进行分别累加,而不是整体进行累加,非常感谢~
An honest tale speeds best being plainly told.
Cheers!

使用道具

板凳
shenliang_111 发表于 2012-2-16 10:01:12 |只看作者 |坛友微信交流群
  1. data a;
  2. input date :yymmn6.
  3.       amt  
  4.           ;
  5. format date yymmn6.;
  6. cards;
  7. 201101    100
  8. 201102    200
  9. 201103    300
  10. 201104    400
  11. 201105    500
  12. ;
  13. /*method one-datastep*/
  14. data result1;
  15.   do until(last);
  16.     set a end=last;
  17.         ytd_amt+amt;
  18.         output;
  19.   end;
  20. run;
  21. /*method two-sql*/
  22. proc sql;
  23.     create table result2 as
  24.       select distinct (a.date),a.amt, sum(b.amt) as ytd_amt
  25.             from (select a.*,monotonic() as n from a) a
  26.                   join  (select a.*,monotonic() as n from a) b
  27.                     on a.n ge b.n
  28.                       group by a.n;
  29. quit;
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

报纸
sunset1986 发表于 2012-2-16 10:25:46 |只看作者 |坛友微信交流群
shenliang_111 发表于 2012-2-16 10:01
非常感谢您,只是小弟目前对sql相关的语句还很不了解,惭愧惭愧
An honest tale speeds best being plainly told.
Cheers!

使用道具

地板
sunset1986 发表于 2012-2-16 10:48:39 |只看作者 |坛友微信交流群
wh_wing 发表于 2012-2-15 23:02
也就是说,我想一个函数实现分段的累加,2011年累加2011年的数据 (1-12月),2010年则累加2010年数据(1-12月)
An honest tale speeds best being plainly told.
Cheers!

使用道具

7
sunset1986 发表于 2012-2-16 10:51:06 |只看作者 |坛友微信交流群
shenliang_111 发表于 2012-2-16 10:01
另外,还需要您帮忙看下我得一个小问题:
我希望对累加进行一个逻辑判别,比如说,根据时间变量进行判别,可以让2011和2010年的数据进行分别累加,2011年1-12月累加,2010年1-12月累加,最终这个ytd_amt变量实现分段累加功能,您认为可以么?非常感谢
An honest tale speeds best being plainly told.
Cheers!

使用道具

8
sunset1986 发表于 2012-2-16 12:14:02 |只看作者 |坛友微信交流群
wh_wing 发表于 2012-2-15 23:02
您好,问题已经解决,再次感谢咯~
An honest tale speeds best being plainly told.
Cheers!

使用道具

9
sunset1986 发表于 2012-2-16 12:14:22 |只看作者 |坛友微信交流群
shenliang_111 发表于 2012-2-16 10:01
您好,问题已经解决,再次感谢咯~
An honest tale speeds best being plainly told.
Cheers!

使用道具

10
shenliang_111 发表于 2012-2-16 12:34:46 |只看作者 |坛友微信交流群
sunset1986 发表于 2012-2-16 12:14
您好,问题已经解决,再次感谢咯~
  1. data a;
  2. input date :yymmn6.
  3.       amt  
  4.           ;
  5. format date yymmn6.;
  6. cards;
  7. 201101    100
  8. 201102    200
  9. 201103    300
  10. 201104    400
  11. 201105    500
  12. 201201    100
  13. 201202    200
  14. 201203    300
  15. 201204    400
  16. 201205    500
  17. ;
  18. /*method one-datastep*/
  19. data temp;
  20. set a;
  21. group=year(date);
  22. run;
  23. data result1;
  24.   set temp;
  25.   by group;
  26.   if first.group then ytd_amt=amt;
  27.   else ytd_amt+amt;
  28.   drop group;
  29. run;
  30. /*method two-sql*/
  31. proc sql;
  32.     create table result2 as
  33.       select distinct (a.date),a.amt, sum(b.amt) as ytd_amt
  34.             from (select a.*,year(date) as group,monotonic() as n from a) a
  35.                   join  (select a.*,year(date) as group ,monotonic() as n from a) b
  36.                     on a.n ge b.n and a.group=b.group
  37.                       group by a.group,a.n;
  38. quit;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
pinggu2688 + 1 + 1 + 1 精彩帖子

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

使用道具

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

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

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

GMT+8, 2024-4-24 08:42