如何在SAS中删除缺失值占比超80%的表变量?
在SAS中删除缺失值占比≥80%的变量
直接按以下步骤操作即可:
1. 统计各变量的缺失率
用PROC MEANS快速统计每个变量的总观测数和缺失数,再转置计算缺失率:
/* 第一步:输出每个变量的总观测数和缺失数 */ proc means data=你的表名 n nmiss noprint; output out=缺失统计 n=总观测数 nmiss=缺失数; run; /* 转置统计结果,方便后续计算 */ proc transpose data=缺失统计 out=缺失率表(rename=(col1=总观测数 col2=缺失数)) name=变量名; var _numeric_ _character_; /* 同时处理数值型和字符型变量 */ run; /* 计算缺失率,筛选出缺失率<80%的变量(这些是要保留的) */ data 缺失率表; set 缺失率表; 缺失率 = (缺失数 / 总观测数) * 100; where 缺失率 < 80; /* 额外处理空表情况:如果总观测数为0,直接保留所有变量 */ if 总观测数 = 0 then output; run;
2. 生成要保留的变量列表
用PROC SQL把需要保留的变量名存入宏变量:
proc sql noprint; select 变量名 into :保留变量 separated by ' ' from 缺失率表; quit;
3. 生成清洗后的新表
用DATA步创建只保留筛选后变量的新表:
data 清洗后的数据; set 你的表名; keep &保留变量.; run;
注意事项
- 把代码里的
你的表名替换成你实际使用的SAS表名称 - 如果只需要处理某一类变量(比如只处理数值型),可以把
PROC TRANSPOSE里的var _numeric_ _character_改成var _numeric_ - 要是原表没有任何观测,代码里的判断会自动保留所有变量,避免报错
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

