如何在 SAS 中使用 proc sql 创建不包括零的均值变量?

问题描述 投票:0回答:1

我有5个变量:

学术年,
部门,
指令GID
库伦r
学分
_小时

我需要按学年、部门和 InstrGID 分组的学分平均值。当“curenr”等于 0 时,平均值必须排除零。但是,零值应保留在新创建的数据集中。下面的脚本运行不包括零的平均值,但创建的数据集现在删除了 0 值。

如何在不删除数据集中的 0 值的情况下创建均值变量?

数据集示例:

学年 部门 输入GID 当前 学分_小时 平均_学分_小时
2022 CS G11111111 10 20 25
2022 CS G11111111 10 30 25
2023 GDA G11111111 20 10 50
2023 GDA G11111111 20 90 50
2023 GDA G22222222 0 0 -
2023 GDA G22222222 20 30 35
2023 GDA G22222222 20 40 35

我当前的脚本:

创建表 avg_cred_hrs 为

选择*,

mean(Credit_Hours) 作为mean_credit_hours

上班。QUERY_FOR_XLSTCOUNT

其中 CURENR >0

按学术年、部门、INSTRGID 分组;

奔跑

sas mean zero proc group
1个回答
0
投票

使用

CASE
语句,当
CURENR
为 0 时返回缺失,否则返回
Credit_Hours
mean()
将排除所有缺失值。

proc sql;
    create table avg_cred_hrs as
        select *,
        mean(CASE(curenr)
                 when(0) then .
                 else Credit_Hours 
             END
            ) as mean_credit_hours
        from work.QUERY_FOR_XLSTCOUNT
        group by AcademicYear, dept, INSTRGID
    ;
quit;
Academicyear    Dept    INSTRGID    curenr  Credit_hours    mean_credit_hours
2022            CS      G1111111    10      30              25
2022            CS      G1111111    10      20              25
2023            GDA     G1111111    20      10              50
2023            GDA     G1111111    20      90              50
2023            GDA     G2222222    20      40              35
2023            GDA     G2222222    20      30              35
2023            GDA     G2222222    0       0               35
© www.soinside.com 2019 - 2024. All rights reserved.