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

如何用SAS的PROC REPORT实现按店铺分组后添加汇总记录

使用PROC REPORT实现SAS数据集分组后添加组内汇总行

没问题,用PROC REPORT完全可以实现你要的按Shop_id分组后,在每组末尾添加Count列汇总行的需求。下面是完整的实现代码,我会拆解关键部分帮你理解:

第一步:创建示例数据集(方便测试)

首先我们先还原你的原始数据集:

data have;
  input Shop_id Trans_id Count;
  datalines;
1 1 10
1 2 23
1 3 12
2 1 8
2 2 15
;
run;

第二步:用PROC REPORT实现分组汇总

核心代码如下:

proc report data=have nowindows headline headskip;
  /* 指定要展示的列 */
  columns Shop_id Trans_id Count;
  
  /* 定义列的属性:Shop_id作为分组变量,Count设为求和类型 */
  define Shop_id / group '店铺ID';
  define Trans_id / display '交易ID';
  define Count / sum '数量';
  
  /* 关键:在每个Shop_id分组后生成汇总行 */
  compute after Shop_id;
    /* 把交易ID列标记为"汇总",明确这是组内合计行 */
    Trans_id = '汇总';
    /* 计算当前分组的Count总和,这里用sum(Count)或者._count_都可以 */
    Count = sum(Count);
    /* 按前面的列位置输出汇总行,保证对齐 */
    line @1 Shop_id $1. @5 Trans_id $4. @10 Count 3.;
  endcomp;
  
  /* 每个分组后添加空行,优化可读性;同时取消默认的整体汇总行 */
  break after / skip;
run;

关键部分解释

  1. define Shop_id / group:把Shop_id设置为分组变量,PROC REPORT会自动按该字段分组展示数据,这是实现组内汇总的基础。
  2. define Count / sum:将Count列定义为求和类型,这样后续可以直接计算组内的总和。
  3. compute after Shop_id:这是实现组内汇总行的核心块——它会在每个Shop_id分组的最后一行执行代码,生成我们需要的汇总行:
    • 给Trans_id赋值为'汇总',用来标识这是合计行;
    • 用sum(Count)计算当前分组的Count总和(也可以用._count_,这是PROC REPORT中对应sum类型列的组内汇总变量);
    • line语句用来指定汇总行的输出格式和位置,确保和前面的明细行对齐。
  4. break after / skip:在每个分组结束后添加一个空行,让分组之间的视觉效果更清晰,同时也会取消PROC REPORT默认生成的整体汇总行(如果不需要整体汇总的话)。

输出效果

运行代码后,你会得到如下结果:

店铺ID 交易ID 数量
1 1 10
1 2 23
1 3 12
1 汇总 45

2 1 8
2 2 15
2 汇总 23

完全符合你要的每组末尾添加汇总行的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:32:16