You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SAS中按组汇总观测值?附分组求均值及PROC TABULATE使用疑问

嘿,我来帮你搞定这个SAS分组求平均的问题!首先得先修正下你的数据集输入——原代码里的cards数据是成对的match和percent,但默认input只会读一次变量,所以得加上@@让SAS循环读取直到数据行结束,不然会读错观测哦。

修正后的数据集代码

data have;
  input match percent @@;
  cards;
0 34 0 54 0 33 0 23 1 60 1 70 1 70 1 70
;
run;

接下来给你介绍几种按组汇总求平均的方法,包括你提到的PROC TABULATE:


方法1:用PROC TABULATE生成格式化报表

PROC TABULATE擅长生成结构化的统计报表,按组求平均的写法如下:

proc tabulate data=have;
  class match;  /* 指定分组变量 */
  var percent;  /* 指定要计算的数值变量 */
  /* 表格结构:行是分组变量,列是percent的均值 */
  table match,
        percent*mean 
        / box='Match Group';  /* 给分组列添加标题美化输出 */
run;

运行后会输出一个清晰的表格,直接展示每个match组对应的percent平均值,和你手动计算的(34+54+33+23)/4、(60+70+70+70)/4结果完全一致。


方法2:用PROC MEANS快速做分组统计

这是SAS里最常用的汇总工具,语法简洁,还能同时输出观测数等额外统计量:

proc means data=have mean n;  /* mean=计算均值,n=统计每组观测数 */
  class match;  /* 按match分组 */
  var percent;  /* 对percent计算统计量 */
run;

如果想把结果保存到数据集里,可以加output out=mean_result mean=avg_percent;参数,后续方便调用。


方法3:用PROC SQL灵活实现分组逻辑

如果你熟悉SQL语法,这种方式更直观,完全贴合你“求和除以个数”的手动逻辑:

proc sql;
  select match,
         avg(percent) as avg_percent format=6.2,  /* 计算均值并指定显示格式 */
         count(*) as obs_count  /* 统计每组的观测个数 */
  from have
  group by match;  /* 按match分组计算 */
quit;

运行后会直接输出分组后的均值和观测数,结果一目了然。


方法4:DATA步手动控制分组计算

如果需要自定义更复杂的汇总逻辑,比如先存总和再计算均值,可以用DATA步配合BY语句:

/* 先按分组变量排序,BY语句要求数据集有序 */
proc sort data=have;
  by match;
run;

data mean_result;
  set have;
  by match;
  /* 每组第一个观测时,初始化求和变量和计数 */
  if first.match then do;
    total_percent = 0;
    obs_num = 0;
  end;
  total_percent + percent;  /* 累加每组的percent总和 */
  obs_num + 1;  /* 统计每组的观测数 */
  /* 每组最后一个观测时,计算均值并输出 */
  if last.match then do;
    avg_percent = total_percent / obs_num;
    output;
    keep match total_percent obs_num avg_percent;  /* 只保留需要的变量 */
  end;
run;

这里的first.match和last.match是BY语句自动生成的标志,分别标记每组的第一个和最后一个观测,用来控制累加和计算的时机。

内容的提问来源于stack exchange,提问作者Nathan123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:20:57