实用|数据分组汇总的几种SAS操作
数据分析时经常会使用到分组汇总的情况,比如下图中需要计算不同年龄组城市urban和农村rural地区人口的男女合计并输出至新的sas数据集。
1. 使用sas提供的数据汇总过程部
1.1 proc means
使用procmeans对变量urban和rural按照age分组求和,并将计算的结果输出到result1数据集里。
proc means data=popu noprint;
var urban rural;
class age;
output out=result1 (keep=age urban_sum rural_sum)
sum=urban_sum rural_sum;
run;
下图可见不同年龄段城市和农村地区的男女人口合计,其中age为空的这一行合计为所有年龄组的总合计。
ods语句为sas数据集输出语句,此处也可以使用,如
ods output Summary=result2(keep=age urban_sumrural_sum);
proc means data=popu sum;
var urban rural;
class age;
run;
ods output close;
注意使用ods时程序中不能使用noprint选项。
1.2 proc tabulate
tabulate过程部可以对数据进行多维度的汇总分析,默认是将结果输出到output窗口,可以使用ods语句将结果输出至数据集。
ods output Table=result3(keep=age urban_sum rural_sum);
proc tabulate data=popu;
var urban rural;
class age;
table age,urban rural;
run;
ods output close;
此外proc summary,proc univariate,proc report等数据汇总过程也可以实现。
2. proc sql
结构化查询语言在多表操作中非常便利,也可以对数据分组汇总:
proc sql noprint;
create table result4 as
select distinct age,sum(urban) as urban_sum, sum(rural) asrural_sum
from popu
group by age;
quit;
结果同上图。
3. DATA部
DATA部的语句具有强大的功能,可以完成很多数据操作,而且速度比较快,也可以进行数据分组汇总,首先要对分组变量进行排序:
proc sort data=popu;
by age;
run;
然后按照顺序对同一组内的数据进行累加,if first.age=1 thendo表示在遇到同一组第一条观测时urban_sum和rural_sum设置为0, iflast.age=1表示保留同一组内最后一条观测,相当于同一组数据累加的合计。
data result5;
set popu;
by age;
keep age urban_sum rural_sum;
if first.age=1 thendo;
urban_sum=0;
rural_sum=0;
end;
urban_sum+urban;
rural_sum+rural;
if last.age=1;
run;
结果同上图。
方法很多,大家喜欢使用哪个呢?
不感兴趣
看过了
取消
不感兴趣
看过了
取消
精彩评论
相关阅读