如何用BASE SAS或SAS Enterprise Guide计算整个SAS表的全局平均值?
计算SAS表所有数据点的整体均值
问题说明
现有SAS表结构及数据如下:
| column1 | column2 | column3 |
|---|---|---|
| 1 | 2 | 3 |
| 5 | 7 | 9 |
| 1 | 2 | 3 |
需要计算表中所有数据点的总和除以总个数,也就是(1+2+3+5+7+9+1+2+3)/9,得到整体均值。
BASE SAS编程实现
方法1:数据步直接累加
这种方法无需转置表,直接在数据步完成计算:
data _null_; /* 替换成你的实际表名 */ set your_table end=eof; /* 初始化累加变量,retain确保值跨观测保留 */ retain total_sum 0 total_count 0; /* 累加当前行所有列的数值 */ total_sum = total_sum + sum(of column1-column3); /* 每一行有3个数据点,计数加3 */ total_count = total_count + 3; /* 到最后一行时计算并输出结果 */ if eof then do; overall_mean = total_sum / total_count; put "所有数据点的整体均值: " overall_mean; /* 如果需要把结果存到表,去掉_null_,并保留overall_mean变量后执行output */ end; keep overall_mean; run;
方法2:PROC SQL转置后计算
先把宽表转成每行一个数据点的长表,再直接计算均值:
/* 转置宽表为长表,所有数据点放到col1列 */ proc transpose data=your_table out=long_table; var column1-column3; run; /* 直接计算总和除以总个数,format设置输出格式 */ proc sql; select sum(col1)/count(col1) as overall_mean format=8.2 from long_table; quit;
SAS Enterprise Guide 操作步骤
- 打开SAS EG,选中目标数据表;
- 点击顶部任务菜单,选择描述性统计 -> 汇总统计;
- 在配置窗口中,把
column1、column2、column3全部添加到分析变量列表; - 切换到统计量选项卡,勾选总和和N(计数),点击运行;
- 把输出里所有列的总和相加,再除以所有列的N值之和,得到整体均值;
- 更简便的方式:先通过数据菜单的转置工具把宽表转成长表,再对转置后的数值列做汇总统计,直接就能看到均值。
内容的提问来源于stack exchange,提问作者computerprogram
相关产品推荐
相关产品推荐

