前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Macro-frq_missing

Macro-frq_missing

作者头像
Setup
发布2019-10-21 17:14:20
6840
发布2019-10-21 17:14:20
举报

SAS Macro

计算变量缺失情况

Macro

SAS Macro 计算变量的填充率/缺失个数

在有的是时候,我们需要知道数据集中的每个变量缺失情况及占比。

小编的这个Macro可以实现数据集里的每个变量缺失情况的统计。

%frq_missing(inds=如何需要check的数据集,outds=缺失结果输出的数据集,sasver=SAS语言的版本/CN 或EN);

/*简体中文下运行结果*/

libname final "C:\Users\Administrator\Desktop\ftd";

%frq_missing(inds=final.final,outds=out1,sasver=CN);

/*英文下运行结果*/

libname final "C:\Users\Administrator\Desktop\ftd";

%frq_missing(inds=final.final,outds=out1,sasver=EN);

如下Macro Code

%macro frq_missing(inds,outds,sasver=CN);

%global _missvarlist _nmissvarlist;

options nonotes;

proc format;

value num_f . = "0" low-high = "1" ;

value $char_f " " = "0" other = "1" ;

run;

ods html close;

ods output onewayfreqs=&outds.;

proc freq data=&inds. ;

table _ALL_ /missing ;

format _numeric_ num_f. _character_ $char_f.;

run;

ods output close;

data _Tem_1(rename=(frequency=frequency1 percent=percent1 )) _Tem_2(rename=(frequency=frequency2 percent=percent2 ));

length variable $50;

set &outds.;

%if &sasver.=CN %then %do;

variable = upcase(scan(Table,2,"“"));%end;

%else %do;

variable = upcase(scan(Table,2," "));%end;

value = max(of F_:);

if value = 0 then output _Tem_1;

if value = 1 then output _Tem_2;

keep variable frequency percent ;

run;

proc sort data=_Tem_1 out=_Tem_1 sortseq=linguistic(numeric_collation=on);by variable ;quit;

proc sort data=_Tem_2 out=_Tem_2 sortseq=linguistic(numeric_collation=on);by variable ;quit;

data &outds.;

retain variable Total frequency1 frequency2;

merge _Tem_1 _Tem_2;

by variable;

if missing(frequency1) then frequency1=0 ;

if missing(frequency2) then frequency2=0 ;

Total=frequency1+frequency2;

%if &sasver.=CN %then %do;

label frequency1="缺失个数" frequency2="非空个数" Total="观测个数" variable="变量名称";

%end;

%else %do;

label frequency1="MISSING(N)" frequency2="NOT MISSING(N)" Total="OBS(N)" variable="VARNAME";

%end;

keep variable Total frequency1 frequency2;

run;

proc sql noprint;

select variable into:_missvarlist separated by " " from &outds.(where=(frequency1=Total)) ;

select variable into:_nmissvarlist separated by " " from &outds.(where=(frequency2=Total)) ;

quit;

proc delete data=_Tem_1 _Tem_2;quit;

options notes;

%put NOTE: ALL OBS IS MISSING VAR(MACRO VAR :_missvarlist):&_missvarlist.;

%put NOTE: ALL OBS IS NOT MISSING VAR (MACRO VAR :_nmissvarlist):&_nmissvarlist.;

ods html ;

%mend;

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档