楼主: CatInNight
1588 9

[有偿编程] 请教一个条件求和的问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

12%

还不是VIP/贵宾

-

威望
0
论坛币
964 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
42 点
帖子
5
精华
0
在线时间
42 小时
注册时间
2015-5-13
最后登录
2020-8-25

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一些数据,形式如下:
LOCATION TIME SALE
A 2016Q1 100
B 2016Q1 50
A 2016 Q2 150
B 2016Q2 200
A 2016Q3 100
B 2016Q4 100
我想利用PROC TABULATE 或者其他过程,得出如下的累加表格:
LOCATION YEAR
A 2016Q1 2016Q2 2016Q3 2016Q4
  100        250      350       350
B 2016Q1 2016Q2 2016Q3 2016Q4
  50       250         250       300
请问应该如何处理?TABULATE制出来的表都是当期的数值,不是累加数值。谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:条件求和 Location Tabulate cation ATION 如何

沙发
zjtj12 发表于 2016-5-11 16:58:53 |只看作者 |坛友微信交流群
  1. data a;
  2. input LOCATION $1. TIME $8.  SALE 3.;
  3. cards;
  4. a 2016Q1 100
  5. b 2016Q1 50
  6. a 2016Q2 150
  7. b 2016Q2 200
  8. a 2016Q3 100
  9. b 2016Q4 100
  10. a 2016Q1 105
  11. b 2016Q1 150
  12. a 2016Q2 250
  13. b 2016Q2 100
  14. a 2016Q4 100
  15. b 2016Q3 100
  16. ;
  17. run;

  18. proc sql;
  19.   create table b as
  20.   select distinct LOCATION,TIME,sum(SALE) as sum
  21.   from a
  22.   group by LOCATION,TIME;
  23. quit;

  24. proc transpose data=b out=c;
  25.    by  LOCATION;
  26.    id TIME;
  27.    var sum;
  28. run;
复制代码

使用道具

藤椅
zjtj12 发表于 2016-5-12 13:03:52 |只看作者 |坛友微信交流群
zjtj12 发表于 2016-5-11 16:58
location 和 time 是字符,不知道为什么“$”显示不出来

使用道具

板凳
jackson1113 发表于 2016-5-12 22:20:10 |只看作者 |坛友微信交流群
data temp;
input LOCATION  $2.   time   $8.     SALE 3.;
cards;
a 2016Q1 100
b 2016Q1 50
a 2016Q2 150
b 2016Q2 200
a 2016Q3 100
b 2016Q4 100
a 2016Q1 105
b 2016Q1 150
a 2016Q2 250
b 2016Q2 100
a 2016Q4 100
b 2016Q3 100
;
run;

proc tabulate data=work.temp;
tables location, time*sale*(sum='');
class location time;
var sale;
run;

使用道具

报纸
CatInNight 发表于 2016-5-16 11:58:54 |只看作者 |坛友微信交流群
zjtj12 发表于 2016-5-11 16:58
刚出差回来,我用您的代码跑了一下,不是累计数啊,还是当期数啊!按照数据,A在2016Q1的销量是205,在2016Q2的累计销量是205+150+250=605才对,程序跑出来A的2016Q2只有400.。。

使用道具

地板
CatInNight 发表于 2016-5-16 11:59:36 |只看作者 |坛友微信交流群
jackson1113 发表于 2016-5-12 22:20
data temp;
input LOCATION  $2.   time   $8.     SALE 3.;
cards;
这位大哥,您的代码结果和一楼一样啊,也不是累计数,只是当期数呀!按照数据,A在2016Q1的销量是205,在2016Q2的累计销量是205+150+250=605才对,程序跑出来A的2016Q2只有400.。。

使用道具

7
zjtj12 发表于 2016-5-16 12:50:24 |只看作者 |坛友微信交流群
CatInNight 发表于 2016-5-16 11:58
刚出差回来,我用您的代码跑了一下,不是累计数啊,还是当期数啊!按照数据,A在2016Q1的销量是205,在20 ...
不好意思我理解错了

使用道具

8
zjtj12 发表于 2016-5-16 13:03:12 |只看作者 |坛友微信交流群
CatInNight 发表于 2016-5-16 11:58
刚出差回来,我用您的代码跑了一下,不是累计数啊,还是当期数啊!按照数据,A在2016Q1的销量是205,在20 ...
这样你试试
  1. data a;
  2. input LOCATION $1. TIME $8.  SALE 3.;
  3. cards;
  4. a 2016Q1 100
  5. b 2016Q1 50
  6. a 2016Q2 150
  7. b 2016Q2 200
  8. a 2016Q3 100
  9. b 2016Q4 100
  10. a 2016Q1 105
  11. b 2016Q1 150
  12. a 2016Q2 250
  13. b 2016Q2 100
  14. a 2016Q4 100
  15. b 2016Q3 100
  16. ;
  17. run;

  18. proc sql;
  19.   create table b as
  20.   select distinct LOCATION,TIME,sum(SALE) as sum
  21.   from a
  22.   group by LOCATION,TIME;
  23. quit;

  24. proc transpose data=b out=c;
  25.    by  LOCATION;
  26.    id TIME;
  27.    var sum;
  28. run;

  29. data d;
  30.     length location $1 s2016Q1 s2016Q2 s2016Q3 s2016Q4 5;
  31.         set c;
  32.     s2016Q1=sum(_2016Q1);
  33.         s2016Q2=sum(_2016Q1,_2016Q2);
  34.         s2016Q3=sum(_2016Q1,_2016Q2,_2016Q3);
  35.         s2016Q4=sum(_2016Q1,_2016Q2,_2016Q3,_2016Q4);
  36.         keep location  s2016Q1 s2016Q2 s2016Q3 s2016Q4;
  37. run;
复制代码

使用道具

9
jackson1113 发表于 2016-5-16 23:45:02 |只看作者 |坛友微信交流群
CatInNight 发表于 2016-5-16 11:59
这位大哥,您的代码结果和一楼一样啊,也不是累计数,只是当期数呀!按照数据,A在2016Q1的销量是205,在 ...
我也理解错了。。。

使用道具

10
wang1839 在职认证  发表于 2016-6-30 16:44:05 |只看作者 |坛友微信交流群
data a;
input LOCATION $ TIME $  SALE;
cards;
A 2016Q1 100
B 2016Q1 50
A 2016Q2 150
B 2016Q2 200
A 2016Q3 100
B 2016Q4 100
;
run;


proc sort data=a;
by LOCATION  TIME;
run;

data b;
        do until(last.TIME);
        set a;
        by LOCATION  TIME;
        sum+SALE;
        end;
        drop SALE;
run;

proc transpose data=b out=c prefix=s;
by LOCATION;
id time;
var sum;
run;

使用道具

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

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

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

GMT+8, 2024-4-25 23:59