楼主: ghbrenda
6750 9

[问答] 如何在PROC MEAN中对多个变量求和后循环输出? [推广有奖]

  • 0关注
  • 0粉丝

小学生

28%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
48 点
帖子
7
精华
0
在线时间
4 小时
注册时间
2010-1-3
最后登录
2013-9-9

楼主
ghbrenda 发表于 2011-1-23 05:56:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我想使用PROC MEAN对数据做aggregation(对同一个BRAND,将每天的SALES相加并输出到同一个文件中。)我可以在output命令中加入所有的变量NOV_1_SALES NOV_2_SALES NOV_3_SALES来实现这个功能。但是这样的变量在实际数据中太多,有很多年,一年有很多天,所以我希望能够使用类似loop的循环语句来实现。

以下是一个数据样本,请大侠们不吝赐教,非常感谢!


BRAND NOV_1_SALES NOV_2_SALES NOV_3_SALES
1                 10                     20                        30
1                  20                    20                        40
2                  9                      10                          8
2                  21                    19                        20            
2                 100                   120                      98
二维码

扫码加我 拉你入群

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

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

关键词:多个变量 mean ROC Aggregation output 变量 proc 输出 求和 mean

回帖推荐

baoaibaobao 发表于2楼  查看完整内容

你想要的结果是这样吧。 输出数据集1: NOV_1_ NOV_2_ NOV_3_ BRAND SALES SALES SALES 1 30 40 70 输出数据集2: NOV_1_ NOV_2_ NOV_3_ BRAND SALES SALES SALES ...

本帖被以下文库推荐

沙发
baoaibaobao 发表于 2011-1-23 08:17:00
你想要的结果是这样吧。
输出数据集1:
                                       NOV_1_    NOV_2_    NOV_3_
                     BRAND     SALES      SALES        SALES
                          1                30             40              70
输出数据集2:
                                       NOV_1_    NOV_2_    NOV_3_
                    BRAND     SALES     SALES        SALES
                           2           130           149             126
如果是.....
  1. data zachary;
  2. input BRAND NOV_1_SALES NOV_2_SALES NOV_3_SALES;
  3. cards;
  4. 1 10 20 30
  5. 1 20 20 40
  6. 2 9  10 8
  7. 2 21 19 20            
  8. 2 100 120 98
  9. ;
  10. %macro zachary(brand_n);
  11.         proc sort data=zachary;
  12.                 by brand;
  13. %do i=1 %to &brand_n;
  14.         proc means data=zachary noprint;
  15.                 by brand;
  16.                 output out=output&i(drop=_type_ _freq_ where=(brand=&i)) sum=;
  17.         run;
  18. %end;
  19. %mend;
  20. %zachary(2);
复制代码
设brand是连续的数字,且最大为2。
已有 1 人评分热心指数 收起 理由
论坛数据分析 + 2 好的意见建议

总评分: 热心指数 + 2   查看全部评分

藤椅
ghbrenda 发表于 2011-1-23 09:26:25
楼上的大侠,真是太感谢你了。

我一开始没有说清楚,我想要的输出结果是这样的:
BRAND        NOV_1_SALES    NOV_2_SALES    NOV_3_SALES               
      1                        30                            40                      70
      2                        130                          149                    126

我运行了你的程序,是分别输出到output1和output2的。我希望最后都输出到一个文件。

我给的例子是11月1-3号,但是完整的数据包括很多年,每一天的数据都有:1月1号-12月31号。另外完整的数据中不同的BRAND可能会有上百个。

请赐教!!!

板凳
baoaibaobao 发表于 2011-1-23 09:32:17
如果是输出到同一数据集,那就没必要循环了。
  1. proc sort data=zachary;
  2.         by brand;
  3. proc means data=zachary noprint;
  4.         by brand;
  5.         output out=output(drop=_type_ _freq_) sum=;
  6. run;
复制代码

报纸
ghbrenda 发表于 2011-1-23 10:42:16
我明白你的意思了。

我需要求和的变量是NOV_1_SALES    NOV_2_SALES    NOV_3_SALES。但是在完整的数据中还有其他字符型变量,是不需要求和的。我希望指定对NOV_1_SALES    NOV_2_SALES    NOV_3_SALES求和,并把对这些变量的求和输出到一个文件。这是我感到困难的地方。

不好意思,我本来想用简单一点的例子,但一直没说明白。下面是一样的例子,多了一个字符型变量QUALITY,这个变量不需要求和。另外在实际的数据中BRAND也是字符型的。

BRAND           QUALITY       NOV_1_SALES           NOV_2_SALES              NOV_3_SALES
APPLE            GOOD                 10                                     20                                  30
APPLE            AVERAGE           20                                     20                                  40
GOOGLE        POOR                   9                                     10                                   8
GOOGLE        GOOD                  21                                    19                                  20
GOOGLE        AVERAGE           100                                   120                                98

请你再指教!!!

多谢,多谢!

地板
baoaibaobao 发表于 2011-1-23 10:49:52
5# ghbrenda 你先用4楼的代码试试,应该是你想要的结果。

7
elek.me 发表于 2011-1-23 13:55:53
  1. data have;
  2.         input BRAND $ QUALITY $ NOV_1_SALES NOV_2_SALES NOV_3_SALES;
  3. cards;
  4. APPLE            GOOD                 10                                     20                                  30
  5. APPLE            AVERAGE           20                                     20                                  40
  6. GOOGLE        POOR                   9                                     10                                   8
  7. GOOGLE        GOOD                  21                                    19                                  20
  8. GOOGLE        AVERAGE           100                                   120                                98
  9. ;
  10. run;

  11. proc means data=have nway noprint;
  12.         class BRAND;
  13.         var NOV_1_SALES NOV_2_SALES NOV_3_SALES;
  14.         output out=want(drop=_type_ _freq_) sum=;
  15. run;
复制代码
我的博客: http://elek.me/sas
联系我: http://about.me/elek

8
elek.me 发表于 2011-1-23 13:57:05
当然,如果你的 XXX_SALES字段比较多,而且你的数据集中数值型变量都需要求和的话,可以把
var NOV_1_SALES NOV_2_SALES NOV_3_SALES;
改成
var _numeric_;
我的博客: http://elek.me/sas
联系我: http://about.me/elek

9
ghbrenda 发表于 2011-1-24 05:56:18
elek.me,baoaibaobao

你们的方法都能得到我想要的结果,太感谢你们了!!!

10
firstknife 发表于 2012-12-27 14:56:04
呵呵,大师威武啊!

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

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