楼主: caibirdcnb
9590 14

[原创博文] SAS新手求助关于proc report的如何汇总 谢谢 [推广有奖]

  • 0关注
  • 36粉丝

讲师

47%

还不是VIP/贵宾

-

威望
0
论坛币
1367 个
通用积分
16.5538
学术水平
67 点
热心指数
70 点
信用等级
64 点
经验
6762 点
帖子
206
精华
2
在线时间
433 小时
注册时间
2011-8-31
最后登录
2023-9-23

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如图所示,我如何才能用SAS来实现右边我所需要的表格?请问应该用PROC REPORT还是PROC TABULATE还是其它语句?
非常感谢!

raw data.jpg              expected result.jpg
二维码

扫码加我 拉你入群

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

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

关键词:proc report Report repor 新手求助 repo report 如图所示 如何

SAS result.jpg (6.9 KB)

SAS result.jpg

回帖推荐

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

本帖被以下文库推荐

沙发
guoluo 发表于 2011-8-31 20:46:06 |只看作者 |坛友微信交流群
  1. data test;
  2.   input process $ model $ face $ type $ qty;
  3. cards;
  4. F 350M UP PH1 35
  5. S 600M UP PH1 41
  6. F 600M UP PH1 12
  7. S 350M UP PH2 79
  8. S 600M DN PH2 56
  9. F 350M DN PH2 43
  10. F 350M DN PH2 82
  11. S 600M DN PH1 64
  12. ;

  13. /*Use Proc Report*/

  14. proc report data=test nowd;
  15. column process model face, type, qty;
  16. define process/group;
  17. define model/group;
  18. define face/across '';
  19. define type/across '';
  20. define qty/analysis ' ';
  21. run;

  22. /*Use Proc Tabulate*/
  23. proc tabulate data=test;
  24.   class process model face type;
  25.   var qty;
  26.   table process*model,face=''*type=''*qty=''*sum=''*format=best.;
  27. run;
复制代码
已有 2 人评分经验 论坛币 收起 理由
eijuhz + 20 精彩帖子
bakoll + 3 + 3 精彩帖子

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

使用道具

藤椅
caibirdcnb 发表于 2011-9-1 14:47:51 |只看作者 |坛友微信交流群
非常感谢楼上。我想扩展一下,统计2个QTY的平均值,同时求2个QTY平均值的和。以下是我修改的程序,但结果却出错,请多多帮忙,谢谢了!
data test;
  input process $ model $ face $ type $ qty qty2;
cards;
F 350M UP PH1 35 324
S 600M UP PH1 41 432
F 600M UP PH1 12 546
S 350M UP PH2 79 645
S 600M DN PH2 56 656
F 350M DN PH2 43 876
F 350M DN PH2 82 365
S 600M DN PH1 64 437
;

/*Use Proc Report*/

proc report data=test nowd;
column process model face, type, (qty qty2 X);
define process/group;
define model/group;
define face/across '';
define type/across '';
define qty/analysis  mean '' ;
define qty2/analysis  mean'' ;

DEFINE X / COMPUTED;
COMPUTE X;
        X = qty.mean + qty2.mean;
ENDCOMP;
run;

使用道具

板凳
caibirdcnb 发表于 2011-9-1 14:56:16 |只看作者 |坛友微信交流群
另外,请问如何把结果输出为数据表,我使用out = xxxx,但是,打开发现 across的那些face/type信息丢失了。呜呜

使用道具

报纸
guoluo 发表于 2011-9-1 21:58:09 |只看作者 |坛友微信交流群
  1. proc report data=test nowd;
  2. column process model face, type, (qty qty2 X);
  3. define process/group;
  4. define model/group;
  5. define face/across '';
  6. define type/across '';
  7. define qty/analysis  mean '' ;
  8. define qty2/analysis  mean '' ;
  9. DEFINE X / COMPUTED;
  10. COMPUTE X;
  11.   _c5_ = _c3_+_c4_;
  12.   _c8_ = _c6_+_c7_;
  13.   _c11_ = _c9_+_c10_;
  14.   _c14_ = _c12_+_c13_;
  15. ENDCOMP;
  16. run;
复制代码
输出成数据集没招,应该就这样了,除非用data步
已有 1 人评分经验 收起 理由
eijuhz + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

使用道具

地板
suzhzh 发表于 2011-9-1 22:48:04 |只看作者 |坛友微信交流群
学习了,不错得。proc report的功能很强。

使用道具

7
caibirdcnb 发表于 2011-9-2 11:56:03 |只看作者 |坛友微信交流群
非常非常感谢guoluo,我又把程序扩展了一下,如下,
  1. data test;
  2.   input process $ model $ face $ type $ Height_1 Height_2 Qty;
  3. cards;
  4. F 350M UP PH1 35 32 43435
  5. S 600M UP PH1 41 43 76878
  6. F 600M UP PH1 12 54 12709
  7. S 350M UP PH2 79 64 32405
  8. S 600M DN PH2 56 65 23140
  9. F 350M DN PH2 43 87 83240
  10. F 350M DN PH2 82 36 32408
  11. S 600M DN PH1 64 43 32039
  12. F 350M UP PH1 45 76 43323
  13. S 600M UP PH1 87 98 76879
  14. F 600M UP PH1 17 32 12324
  15. S 350M UP PH2 98 76 32567
  16. S 600M DN PH2 32 32 23215
  17. F 350M DN PH2 52 21 83879
  18. F 350M DN PH2 85 76 32434
  19. S 600M DN PH1 43 90 32776
  20. ;
  21. run;
  22. ODS HTML File = 'C:\MyRawData\result.htm';
  23. proc report data=test out = ABC nowindows;
  24. column process model face, type, (Height_1 Height_2 Height_Avg Height_Delta Qty);
  25. define process/group;
  26. define model/group;
  27. define face/across '';
  28. define type/across '';
  29. define Height_1/analysis  mean 'Height_1 Avg';
  30. define Height_2/analysis  mean 'Height_2 Avg';
  31. define Qty/analysis  sum ;
  32. DEFINE Height_Avg / COMPUTED;
  33. COMPUTE Height_Avg;
  34.   _c5_ = (_c3_+_c4_)/2;
  35.   _c10_ = (_c8_+_c9_)/2;
  36.   _c15_ = (_c13_+_c14_)/2;
  37.   _c20_ = (_c18_+_c19_)/2;
  38. ENDCOMP;
  39. DEFINE Height_Delta / COMPUTED 'Height_1 - Height_2';
  40. COMPUTE Height_Delta;
  41.   _c6_ = _c3_-_c4_;
  42.   _c11_ = _c8_-_c9_;
  43.   _c16_ = _c13_-_c14_;
  44.   _c21_ = _c18_-_c19_;
  45. ENDCOMP;
  46. run;
  47. ODS HTML close;
复制代码


结果没有出错,是我想要的结果,如下,
untitled.JPG
但是,我又有1个新问题,如何把这个结果保存为数据集,同时,我想保存为1个比较标准的table如下图所示,请问应该如何实现?如你前面所说,可能需要调用数据步一切重新开始,麻烦您一步一步指导,非常非常感谢!
untitled2.JPG

使用道具

8
guoluo 发表于 2011-9-2 21:31:36 |只看作者 |坛友微信交流群
这个直接hardcoding把输出数据集的变量标签改掉方便点吧

使用道具

9
caibirdcnb 发表于 2011-9-3 18:18:39 |只看作者 |坛友微信交流群
guoluo,非常感谢!
但我还是有点不明白,我当然可以通过rename把_C3_改为DN_PH1_Height_1 Avg,但是,这个前提是我知道FACE里面的具体值是DN和UP,TYPE的具体值是PH1和PH2,但如果我不知道这些列里面的数值,我应该怎么实现呢?我最后是想把这个模块放进宏里面的。
谢谢了!

使用道具

10
ntsean 发表于 2011-9-4 07:20:14 |只看作者 |坛友微信交流群
caibirdcnb 发表于 2011-9-2 11:56
非常非常感谢guoluo,我又把程序扩展了一下,如下,

结果没有出错,是我想要的结果,如下,
你这结果不对吧, 如果假设 qty是其中的frequency 的话,应该把qty考虑为weight(如果我没理解错的话)
你可以用

proc means data=test mean;
class process model face type;
var height_1 height_2;
freq qty;
run;

得到结果,然后输出为data,在做些处理,比如transpose就可易了

使用道具

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

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

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

GMT+8, 2024-5-1 09:27