楼主: mich_ard
11442 2

[原创博文] SAS笔记2:分组并在组内求和 [推广有奖]

  • 0关注
  • 2粉丝

本科生

46%

还不是VIP/贵宾

-

威望
0
论坛币
69 个
通用积分
2.0088
学术水平
18 点
热心指数
18 点
信用等级
17 点
经验
1203 点
帖子
63
精华
0
在线时间
114 小时
注册时间
2016-10-12
最后登录
2017-11-10

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

为简明起见,以 sashelp.class 数据集为例,要求以性别分组,分别求男、女身高总和。

sashelp.class 原表:

                        

Obs    Name       Sex    Age    Height    Weight
   1    Joyce       F      11     51.3       50.5
   2    Louise      F      12     56.3       77.0
   3    Alice       F      13     56.5       84.0
   4    Jane        F      12     59.8       84.5
   5    Janet       F      15     62.5      112.5
   6    Carol       F      14     62.8      102.5
   7    Judy        F      14     64.3       90.0
   8    Barbara     F      13     65.3       98.0
   9    Mary        F      15     66.5      112.0
  10    James       M      12     57.3       83.0
  11    Thomas      M      11     57.5       85.0
  12    John        M      12     59.0       99.5
  13    Jeffrey     M      13     62.5       84.0
  14    Henry       M      14     63.5      102.5
  15    Robert      M      12     64.8      128.0
  16    William     M      15     66.8      112.0
  17    Ronald      M      15     67.0      133.0
  18    Alfred      M      14     69.0      112.5
  19    Philip      M      16     72.0      150.0


方法1,first.varaiable

data height_sum1;

set sashelp.class;          /* class数据集应先按sex sort*/

by sex;

if first.sex then tot_H=0;

tot_H + height;

if last.sex then output ;

run;

                                      Obs    Sex    tot_H
                                       1      F     545.3
                                       2      M     639.4

方法2, proc means


proc means data=class ;             /* class数据集应先按sex sort*/
by sex;
output out=height_sum2 (drop=_type_ _freq_)  sum(height)=    /autoname;
run;

                                                   Height_
                                     Obs    Sex      Sum
                                      1      F      545.3
                                      2      M      639.4


注1,也可以不用 /autoname命令,而自己指定变量名称 total_height :

proc means data=class ;

by sex;
output out=height_sum3 (drop=_type_ _freq_)  sum(height)=total_height;
run;

                                                    total_
                                      Obs    Sex    height
                                       1      F      545.3
                                       2      M      639.4


注2,此处 by sex 可用 class sex 代替,数据集sashelp.class 也不必经过事先任何sort。其结果除了分组求和,还有额外一项,是两组的总和。
proc means data=class ;
class sex;
output out=height_sum4 (drop=_type_ _freq_)  sum(height)=T_HEIGHT;
run;

                                     Obs    Sex    T_HEIGHT
                                      1             1184.7
                                      2      F       545.3
                                      3      M       639.4


方法3,proc summary

proc summary其实和上述proc means的用法一样,区别是,前者执行后不会自动给出分析的结果,必须用output/out 语句(或 print过程来显示

proc summary data=class ;
by sex;
output out=XXX (drop=_type_ _freq_) sum(height) = H_summary;
run;

                                    Obs    Sex    H_summary
                                     1      F       545.3
                                     2      M       639.4


方法4,proc tabulate数据集不用先 sort )

proc tabulate data=sashelp.class;
class sex;
var height;
table sex*height ;
run;
                                  ‚           Sex           ‚
                                  ‚     F      ‚     M      ‚
                                  ‚   Height   ‚   Height   ‚
                                  ‚    Sum     ‚    Sum     ‚
                                  ‚   545.30   ‚   639.40   ‚


方法
5,proc sql
( 数据集不用先 sort )

Proc sql;
SELECT sex,

sum(height) as tot_height from sashelp.class
GROUP BY sex;
quit;

                                        Sex  tot_height
                                        F         545.3
                                        M         639.4



二维码

扫码加我 拉你入群

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

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

关键词:Tabulate proc sql SASHELP Summary Jeffrey

回帖推荐

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

try the class to replace by you don't need to sort
沙发
dogmamongo 发表于 2016-12-25 09:20:17 |只看作者 |坛友微信交流群
try the class to replace by

you don't need to sort

使用道具

藤椅
mich_ard 发表于 2016-12-25 15:40:25 |只看作者 |坛友微信交流群
dogmamongo 发表于 2016-12-25 09:20
try the class to replace by

you don't need to sort
谢谢指出。我已经加上了这一条。

使用道具

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

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

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

GMT+8, 2024-4-26 14:04