楼主: reduce_fat
1188 3

[学习分享] 悬赏数据缺失问题怎么计算平均值时候不计入缺失数据的行数? [推广有奖]

荣誉版主

海外论坛首席管理员

已卖:18511份资源

泰斗

28%

还不是VIP/贵宾

-

TA的文库  其他...

海外原创经济论文和写作技巧

威望
11
论坛币
3591317 个
通用积分
34055.2893
学术水平
6834 点
热心指数
7193 点
信用等级
6665 点
经验
1830 点
帖子
12424
精华
78
在线时间
1974 小时
注册时间
2011-6-13
最后登录
2025-10-23

一级伯乐勋章 初级热心勋章 初级学术勋章 中级热心勋章 中级学术勋章 高级学术勋章 初级信用勋章 特级学术勋章 高级热心勋章 中级信用勋章 特级热心勋章 高级信用勋章 特级信用勋章

楼主
reduce_fat 发表于 2024-9-8 14:55:23 |AI写论文
46论坛币
悬赏数据缺失问题怎么计算平均值时候不计入缺失数据的行数?请看附件样本数据。 Sample_Data.xlsx (8.68 KB)
我打算计算使用proc means 或者 proc sql 都行,但是感觉计算出的结果小于预期很多,可能跟缺失数据的行数有关。 请帮忙指点,金币不是问题。 谢谢。

比如 group_name = A, B, C, D, E 在2021年如果A, C都没有数显示. 那么计算一年的平均数时候,就需要用B,D,E的数除以3而不是5。我是直接把缺失数据部分替换成0,不知道这样会不会影响计算平均数。 要不然得出的平均数小于预期。 如果某一行所有group_name 都是缺失,那么可以算成是0。但凡有一个组不是缺失,最后只计算有数据的组的数在某一年的平均数。

比如:

proc means data=sample_data n nmiss mean nolabels;
class survey_year;
by group_name;
var var1 var2 var3 var4 var5 var 6;
run;

proc sql;
create table sample_summary as
select group_name, survey_year, avg(var1) as avg_var1, avg(var2) as avg_var2, avg(var3) as avg_var3, avg(var4) as avg_var4, avg(var5) as avg_var5, avg(var6) as avg_var6
from sample_data
group by group_name, survey_year
order by 1, 2;
quit;



最佳答案

extension 查看完整内容

1)、prefix=选项是在转置的时候给新生成的变量名加个前缀,便于后面的分析用,并不是规定纳入的变量; 2)、mean函数计算的就是非缺失数的均值,条件语句强制把全部缺失的平均值置为0,否则SAS默认输出的是缺失值; 3)、transpose里的id语句是给转置后的变量重命名的变量,否则就按COL11、COL2……命名。
关键词:数据缺失 缺失数据 平均值 proc sql Summary
复制粘贴积分链接 https://bbs.pinggu.org/ext8_airdrop.php?airdropfrom^^uid=2669999

沙发
extension 发表于 2024-9-8 14:55:24
reduce_fat 发表于 2024-9-15 06:16
这个proc transpose 里的prefix=group_; 是把group_name 里的5个选项A 到E都包括了吗?

还有下面这个 ...
1)、prefix=选项是在转置的时候给新生成的变量名加个前缀,便于后面的分析用,并不是规定纳入的变量;
2)、mean函数计算的就是非缺失数的均值,条件语句强制把全部缺失的平均值置为0,否则SAS默认输出的是缺失值;
3)、transpose里的id语句是给转置后的变量重命名的变量,否则就按COL11、COL2……命名。

藤椅
extension 发表于 2024-9-13 16:38:52
SAS中mean函数可以计算非缺失记录的均值,原数据可以考虑转置后联用nmiss和mean函数。code如下:
data sample_data;
input survey_year group_name $ var1 var2 var3 var4 var5 var6;
cards;
2021 A 1 2 . 3 3 3
2021 B 2 . . 4 4 .
2021 C . . 4 . 2 4
2021 D 4 5 1 . 1 1
2021 E 2 2 3 . 3 .
2022 A 1 2 2 4 1 .
2022 B . 3 5 . 2 .
2022 D . . 4 5 4 .
2022 E 3 . 1 2 3 5
2023 A 4 . . 1 . 2
2023 B . 2 . 3 4 3
2023 C 5 4 . 2 2 .
2023 E . 1 5 2 . 4
2024 B 4 . 2 . . 1
2024 C . 5 . 4 . 3
2024 D 1 . 4 . 4 2
2024 E 2 3 . 1 1 .
;
run;
proc sort data=sample_data;
by survey_year group_name;
run;
proc transpose data=sample_data out=sample_data2 PREFIX=group_;
by survey_year;
var var1 var2 var3 var4 var5 var6;
id group_name;
run;
data want;
set sample_data2;
if nmiss(of group_:) <5 then want=mean(of group_:);
else want=0;
run;
proc transpose data=want out=want2;
by survey_year;
var want;
id _NAME_;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
reduce_fat + 5 + 5 + 5 分析的有道理

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

板凳
reduce_fat 发表于 2024-9-15 06:16:37
extension 发表于 2024-9-13 16:38
SAS中mean函数可以计算非缺失记录的均值,原数据可以考虑转置后联用nmiss和mean函数。code如下:
data sa ...
这个proc transpose 里的prefix=group_; 是把group_name 里的5个选项A 到E都包括了吗?

还有下面这个代码是不是把只要有一行里不是全部五个选项的值都是缺失,就会把任意组合的没缺失的数值计算平均值? 比如有的缺失两个就是三个数加起来除以三,缺失4个,就是剩下那个数值,缺失1个,就是4个数加起来除以4? 没有缺失就是五个数加起来除以5?

如果五个数字都缺失才会被强制把其平均数设置为0?

set sample_data2;
if nmiss(of group_:) <5 then want=mean(of group_:);
else want=0;
run;

最后一个proc transpose 里的那个id _NAME_的作用是什么?能否重命名?谢谢。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-28 15:26