设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1598|回复: 0

两种SAS代码实现变量的缺失值频数及占比

[复制链接]

16

主题

176

金钱

267

积分

入门用户

发表于 2019-7-3 14:02:24 | 显示全部楼层 |阅读模式

sas对缺失值的统计,可得出缺失值的频数及占比。以下为详细程序代码:
/*首先是创建示例数据集*/
data tmp;
infile datalines delimiter=",";
length var1 $8.;
length var2 8.;
length var3 $8.;
length var4 8.;
input var1 $ var2 var3 $ var4
@@;
datalines;
A,1,B,2.,3,C,.C,.,.,3
;
run;

如图得到下列数据集
1.png
然后统计数据集中缺失值和占比,先为字符型和数值型先分别设定一个format,然后直接对变量进行频数统计,再做一下简单处理,就可得到理想结果。

代码如下

proc format;

value num_f . = "0"

low-high = "1" ;

value $char_f " " = "0"

other = "1" ;

run;

/*频数统计*/

ods output onewayfreqs=tables;

proc freq data= tmp ;

tables _all_ / missing;

format _numeric_ num_f. _character_ $char_f.;

run;

ods output close;

数据集如下:
2.png
/*保留缺失变量、频数和占比*/

data miss;

length variable $50;

set tables;

variable = scan(Table,2,"“"); /*获取变量名*/

/*由于变量都是F_开头,因此可以用F_:来包含所有变量*/

value = max(of F_;

if value = 0; /*缺失标志*/

keep variable frequency percent;

label variable = "缺失变量名" frequency = "缺失频数" percent = %nrstr("%缺失占比");

run;
3.png
以上为第一种方法;

下面用数组的方法进行实现。

/*找出缺失变量*/

data tmp11;

set tmp;

array arr1{*} _NUMERIC_ ;

array arr2{*} _CHARACTER_ ;

length variable $50;

do i = 1 to dim(arr1);

if missing(arr1(i)) then do;

variable =vname(arr1(i)); /*数值型缺失*/

output;

end;

end;

do j = 1to dim(arr2);

if missing(arr2(j)) then do;

variable = vname(arr2(j)); /*字符型缺失*/

output;

end;

end;

keep variable;

run;

/*统计缺失频数和占比*/

proc sql noprint;

select count(*) into : N from tmp;

create table miss as

select variable label = "缺失变量名",count(*) as frequency label = "缺失频数",

input(compress(put(calculated frequency / &N.,percent10.2),"%"),best32.) as percent label = %nrstr("%缺失占比")

from tmp11

group by variable;

quit;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表