全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1160 3
2024-09-08
悬赏 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……命名。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
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……命名。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

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;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

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_的作用是什么?能否重命名?谢谢。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群