全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4042 4
2016-08-20
目前的原始数据变量较多,100多个变量,其中变量的空值率也较高,我想批量删除90%空值率的变量,请问怎么操作呢?
目前类似这样
a  b c d(还有很多变量)
1 2 3 4
. .  .   .
. .   .  .
. .  .   .
. 2 .  1
. 1 1  .
. 9. .  .
7 .6   .
.  .  .  .
.  . .  1
.  1 . .
4 . .  .
8 . 3.
二维码

扫码加我 拉你入群

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

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

全部回复
2016-8-20 10:21:40
proc transpose data=test out=miss;
var _all_;
run;

data calmiss;
set miss;
num=nmiss(of col:);
tot=n(of col:)+nmiss(of col:);
run;

proc sql noprint;
select distinct _name_ into: var separated by ""
from calmiss
where num/tot >=0.9;
quit;

data wanted;
set test;
drop &var;
run;
二维码

扫码加我 拉你入群

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

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

2016-8-20 14:16:16
wwang111 发表于 2016-8-20 10:21
proc transpose data=test out=miss;
var _all_;
run;
谢谢您。code跑的时候提示未引用过drop中的变量...我理解您的意思,是转置后计算。可如果本身数据的样本量也较大,是不是不适合转置呢?  请问怎么可以计算所有变量的缺失值率呢?
二维码

扫码加我 拉你入群

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

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

2016-8-20 14:16:42
wwang111 发表于 2016-8-20 10:21
proc transpose data=test out=miss;
var _all_;
run;
谢谢您。code跑的时候提示未引用过drop中的变量...我理解您的意思,是转置后计算。可如果本身数据的样本量也较大,是不是不适合转置呢?  请问怎么可以计算所有变量的缺失值率呢?
二维码

扫码加我 拉你入群

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

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

2016-8-20 18:46:53
try this:

proc freq data=test nlevels;
table _all_;
ods output nlevels=nlevels;
run;

data nobs;
set test end=last;
nobs=_n_;
if last;
keep nobs;
run;

data calmiss;
set nlevels(keep=tablevar nnonmisslevels);
if _n_=1 then set nobs;
if (nobs-nnonmisslevels)/nobs>=0.9;
run;

data _null_;
set calmiss end=last;
if _n_=1 then call execute("data wanted;set test;drop ");
call execute(tablevar);
if last then call execute(";run;");
run;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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