楼主: caibirdcnb
10219 14

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

11
guoluo 发表于 2011-9-4 16:05:47
供参考
  1. data type;
  2.   length process model face type $8;
  3.   do process = 'F','S';
  4.     do model = '350M', '600M';
  5.           do face = 'UP', 'DN';
  6.             do type = 'PH1', 'PH2';
  7.                   output;
  8.   end;end;end;end;
  9. run;

  10. proc means data=test classdata=type noprint nway;
  11. class process model face type;
  12. var Height_1 Height_2 Qty;
  13. output out=out(drop=_freq_ _type_) mean=;
  14. run;

  15. data out2;
  16.   set out;
  17.   array temp (*) Height_1 Height_2 Qty;
  18.   do i = 1 to dim(temp);
  19.     varname = catx('_', face, type,vname(temp(i)));
  20.         varval = temp(i);
  21.         output;
  22.   end;
  23.   keep process model varname varval;
  24. run;
  25.           
  26. proc sort data=out2;
  27.   by process model;
  28. proc transpose data=out2 out=final(drop=_name_);
  29.   by process model;
  30.   id varname;
  31.   var varval;
  32. run;
复制代码

12
caibirdcnb 发表于 2011-9-6 11:58:47
guoluo,真的真的非常感谢你的耐心。
我还有几个问题需要请教:
1.查阅了帮助,我的理解是classdata=type的目的是让test数据集至少按照type数据集的内容summary数据,因为有些组合在test中不存在,有了classdata=type后,没有的组合也会按照type出现,只是是空值。但如果我并不知道process model face type的具体数值和数目,那如何预先知道type数据集呢?谢谢!
2.关于nway我虽然不理解,但对比有和没有nway的结果,似乎是对一个_TYPE_的列只保留最高值,请问_TYPE_的含义是什么?谢谢!
3.在process means的过程中,如果我对Height_1/2求得是平均值,而qty要的是总数,那应该怎么实现呢?谢谢!

13
guoluo 发表于 2011-9-6 20:57:31
caibirdcnb 发表于 2011-9-6 11:58
guoluo,真的真的非常感谢你的耐心。
我还有几个问题需要请教:
1.查阅了帮助,我的理解是classdata=type ...
不客气,请看下面的回复
1 可以先用SQL或者其他方法查看,你要写宏可以把结果保存到宏变量;
2 _TYPE_由class语句产生,0表示不分组,1表示用class的第一个变量分组,依次类推;
3 output out=out(drop=_freq_ _type_) mean(Height_1 Height_2)= sum(Qty)=;

14
caibirdcnb 发表于 2011-9-8 00:03:22
谢谢你,guoluo。
1. 嗯,我应该可以使用汇总得到process model face type的具体数值和数目,然后使用call symput调用。
2. 明白。
3. 明白。

再次表示感谢。这种复杂的汇总都能弄出来,我想以后碰到任何都能得心应手了,毕竟工作实际中大多数汇总比这个简单多了。

15
caroly77 发表于 2012-10-11 20:58:15
值得好好研究学习

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 19:10