在使用cmiss函数求行缺失个数时,需要注意的一个地方:
data a;
v1=.;v2='';x=3;output;
v1=1;v2='A';x=2;output;
v1=3;v2='';x=.;output;
v1=.;v2='B';x=2;output;
run;
v1=.;v2='';x=3;output;
v1=1;v2='A';x=2;output;
v1=3;v2='';x=.;output;
v1=.;v2='B';x=2;output;
run;
data b;
set a;
sum_miss=cmiss(of _all_);
run;
set a;
sum_miss=cmiss(of _all_);
run;
当我们使用
sum_miss=cmiss(of _all_)时,会发现缺失值的个数比实际缺失值个数要多一个:
如果改使用
sum_miss=cmiss(of v1--x)时:
data b;
set a;
sum_miss=cmiss(of v1--x);
run;
set a;
sum_miss=cmiss(of v1--x);
run;
结果发现缺失值个数跟实际缺失值个数保持一致:
从结果我们可以看到用_all_时,比v1--x多了一个变量的缺失值,为了查明原因,我们采用put语句进行调试:
data b;
set a;
put _all_;
sum_miss=cmiss(of _all_);
run;
set a;
put _all_;
sum_miss=cmiss(of _all_);
run;
结果如下所示:
因此可以看到多出的那个变量缺失值是sum_miss,因此为了避免这种情况出现,我们可以用retain语句给sum_miss初始化:
data b;
set a;
retain sum_miss 0;
sum_miss=cmiss(of _all_);
run;
set a;
retain sum_miss 0;
sum_miss=cmiss(of _all_);
run;
结果如下所示:
从上述结果可以看到缺失值个数统计跟实际缺失值个数保持一致。