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

如何用SAS Proc SQL生成排除零值的均值变量且保留零值记录

问题描述

现有数据集包含5个变量:Academic_year、dept、InstrGID、curenr、credit_hours,需求如下:

  • 按Academic_year、dept、InstrGID分组计算credit_hours的均值
  • 计算均值时需排除curenr=0对应的记录
  • 最终数据集必须保留所有原始记录(包括curenr=0的行)

当前使用的PROC SQL脚本会过滤掉curenr=0的记录,无法满足保留全部行的要求,示例数据集和当前脚本如下:

示例数据集

AcademicyearDeptINSTRGIDcurenrCredit_hoursmean_credit_hours
2022CSG11111111102025
2022CSG11111111103025
2023GDAG11111111201050
2023GDAG11111111209050
2023GDAG2222222200-
2023GDAG22222222203035
2023GDAG22222222204035

当前脚本

proc sql;
    create table avg_cred_hrs as
    select *,
           mean(Credit_Hours) as mean_credit_hours
    from work.QUERY_FOR_XLSTCOUNT
    where CURENR >0
    group by AcademicYear, dept , INSTRGID;
quit;

解决方案

方法1:PROC SQL 条件均值+左连接

先单独计算符合条件的分组均值,再通过左连接将均值匹配回原始数据集,确保所有原始记录被保留:

proc sql;
    create table avg_cred_hrs as
    select a.*,
           b.mean_credit_hours
    from work.QUERY_FOR_XLSTCOUNT as a
    left join (
        -- 子查询仅计算curenr>0的分组均值
        select AcademicYear, dept, INSTRGID,
               mean(Credit_Hours) as mean_credit_hours
        from work.QUERY_FOR_XLSTCOUNT
        where CURENR > 0
        group by AcademicYear, dept, INSTRGID
    ) as b
    on a.AcademicYear = b.AcademicYear
    and a.dept = b.dept
    and a.INSTRGID = b.INSTRGID;
quit;
  • 子查询负责生成过滤后的分组均值
  • 左连接保证原始数据的所有行都被保留,curenr=0的行对应的均值会显示为缺失值(对应示例中的-)

方法2:DATA步 + PROC MEANS

先用PROC MEANS计算分组均值,再通过合并操作将均值关联到原始数据:

-- 生成仅含分组和均值的临时数据集
proc means data=work.QUERY_FOR_XLSTCOUNT noprint;
    where CURENR > 0;
    class AcademicYear dept INSTRGID;
    var Credit_Hours;
    output out=mean_data mean=mean_credit_hours;
run;

-- 合并均值到原始数据集,保留所有原始记录
data avg_cred_hrs;
    merge work.QUERY_FOR_XLSTCOUNT mean_data(keep=AcademicYear dept INSTRGID mean_credit_hours);
    by AcademicYear dept INSTRGID;
run;
  • PROC MEANS生成精简的均值统计结果
  • MERGE语句按分组变量匹配,自动保留原始全部行,无对应均值的行将显示缺失值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:23:20