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

如何在SAS Enterprise Guide中按列聚合各值的出现次数?

在SAS Enterprise Guide/PROC SQL中实现列值频次的宽表聚合

方法一:PROC SQL直接计算(适合已知目标值)

通过CASE语句逐个统计指定值的出现次数,一步生成目标数据集:

/* 替换HAVE为你的实际原数据集名称 */
PROC SQL;
CREATE TABLE WANT AS
SELECT
    SUM(CASE WHEN COL2 = 'A' THEN 1 ELSE 0 END) AS COL2_A,
    SUM(CASE WHEN COL2 = 'B' THEN 1 ELSE 0 END) AS COL2_B,
    SUM(CASE WHEN COL3 = 'C' THEN 1 ELSE 0 END) AS COL3_C,
    SUM(CASE WHEN COL3 = 'D' THEN 1 ELSE 0 END) AS COL3_D
FROM HAVE;
QUIT;

说明

  • CASE语句判断每行是否匹配目标值,匹配记1、不匹配记0,通过SUM累加得到总出现次数
  • 生成的WANT数据集即为你需要的一行四列的统计结果

方法二:PROC FREQ+转置(适合值较多或不确定的场景)

如果COL2/COL3中的取值较多或无法提前确定,可通过频次统计+转置的方式自动生成统计列:

/* 1. 统计COL2的频次,仅输出数据集不生成报表 */
PROC FREQ DATA=HAVE NOPRINT;
    TABLE COL2 / OUT=FREQ_COL2(RENAME=(COUNT=COL2_COUNT) DROP=PERCENT);
RUN;

/* 2. 将COL2的频次长表转成宽表,自动添加COL2_前缀 */
PROC TRANSPOSE DATA=FREQ_COL2 OUT=WIDE_COL2 PREFIX=COL2_;
    ID COL2;
    VAR COL2_COUNT;
RUN;

/* 3. 统计COL3的频次 */
PROC FREQ DATA=HAVE NOPRINT;
    TABLE COL3 / OUT=FREQ_COL3(RENAME=(COUNT=COL3_COUNT) DROP=PERCENT);
RUN;

/* 4. 将COL3的频次长表转成宽表,自动添加COL3_前缀 */
PROC TRANSPOSE DATA=FREQ_COL3 OUT=WIDE_COL3 PREFIX=COL3_;
    ID COL3;
    VAR COL3_COUNT;
RUN;

/* 5. 合并两个宽表得到最终结果 */
DATA WANT;
    MERGE WIDE_COL2 WIDE_COL3;
RUN;

说明

  • PROC FREQ的OUT参数输出频次统计结果,NOPRINT参数避免生成冗余报表
  • PROC TRANSPOSE将按值分组的长表转换为横向排列的宽表,PREFIX参数统一为列名添加前缀
  • 最后通过MERGE合并两个宽表,得到包含所有统计列的数据集

SAS Enterprise Guide操作提示

在EG中可选择两种操作方式:

  • 直接打开程序编辑器,粘贴上述代码并替换数据集名后运行
  • 通过拖拽任务实现:依次添加「频率」「转置」「合并数据集」任务,按代码逻辑配置对应参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:45:49