11/7/2007
答客问:SAS对列求和
SAS Base自带的累加函数SUM,虽然有漂亮的缩写方式如SUM(of x1-x100000),但几乎没有什么应用价值(除了在数组array下),因为SUM函数是对行求和,而在通常的二维表中,我们经常需要对列求和。这个问题用proc SQL过程最为方便,还有一个简单的替代方案就是在proc print步下使用SUM选项。比如,对count求和:
data a;
input ID sex $ count;
cards;
1 M 3
2 F 4
3 M 5
4 F 5
;
proc print data=a;
sum count;
run;
结果显示:
Obs ID sex count
1 1 M 3
2 2 F 4
3 3 M 5
4 4 F 5
=====
17
如果想按sex分组显示,则先对sex排序:
proc sort data=a;
by sex;
run;
proc print data=a;
sum count;
by sex;
run;
结果显示:
--------------------------------------------- sex=F -----------------------------------------------
Obs ID count
1 2 4
2 4 5
--- -----
sex 9
---------------------------------------------- sex=M -----------------------------------------------
Obs ID count
3 1 3
4 3 5
--- -----
sex 8
=====
17
当然,你可以让结果更紧凑些,比如在proc print中的by sex下面再加一个id sex,看起来就是这样:
sex ID count
F 2 4
4 5
--- -----
F 9
M 1 3
3 5
--- -----
M 8
=====
17