熱線電話:13121318867

登錄
首頁精彩閱讀關于缺失統計函數cmiss、nmiss中的小細節
關于缺失統計函數cmiss、nmiss中的小細節
2017-04-03
收藏

關于缺失統計函數cmiss、nmiss中的小細節

數據清理中統計缺失變量的缺失的時候,我們經常會用到cmiss函數和nmiss函數,這兩者都是用來對缺失個數進行統計,兩者區別就在于前者既能用于數值型也能用于字符型,而nmiss則只能用于數值型。

在使用這兩個函數的過程中,我們往往會發現在統計缺失個數時候,經常出現實際計算出來的值要大于缺失值的個數,這是為什么呢?

舉個簡單的例子:

data tmp;

v1=.;v2='';x=3;output;

v1=1;v2='A';x=2;output;

v1=3;v2='';x=.;output;

v1=.;v2='B';x=2;output;

run;

我們得到四行數據,如下所示:
 

接下來用cmiss函數進行行缺失個數的統計:

data tmp1;

set tmp;

sum_miss=cmiss(of _all_);

run;

最終得到如下結果:


我們發現sum_miss的每一行值都比實際值要大1,為了了解這個過程,我們來通過put語句展示一下過程:

data tmp1;

set tmp;

put _all_;

sum_miss=cmiss(of _all_);

run;

查看日志:


我們發現在統計行缺失時,由于使用的_all_,所以把sum_miss變量也包含進去了,所以才會產生如上結果。

那么為了避免出現這種結果,我們可以用兩種辦法:

第一種:對sum_miss賦值,例如:

data tmp1;

set tmp;

sum_miss = 0;

sum_miss=cmiss(of _all_);

run;


第二種:將變量列出來,例如:


data tmp1;

set tmp;

sum_miss=cmiss(v1,v2,x);

run;


但是通常情況下,我們還是習慣用第一種方法,因為有時候變量太多,我們又不希望把他們都列出來,所以喜歡采用_all_來表示所有變量。

有童鞋也許會問了,如果我變量很多,但是我又只想對一部分變量進行行缺失統計,那么我該怎么做呢?

方法也很多:

例如可以選擇第二種方法,只是需要將你要選擇的那些變量用宏變量把他們包含成一列:sum_miss = cmiss(of ˉo_var.);其中宏變量macro_var = v1 v2 x;。

例如可以選擇第一種方法,只是在set數據集時,將需要的都keep,前提還是需要將他們用宏變量包含城一列。

等等,根據具體情況,只要靈活結合宏,往往我們都能得到事半功倍的效果。

另外使用cmiss還要一個地方需要注意:

在將cmiss與%sysfunc結合使用時,需要注意對于宏變量是缺失的,我們要用(.)來表示,而不能用空格來表示,例如:

%let a = ;

%let b = hello;

%let c = %sysfunc(cmiss(&a.,&b.));

%put c = &c.;

我們可以看到日志中如下所示:


雖然最終得到了正確的結果,但是程序還是會報錯。

那么為了消除這個error,我們需要在宏變量后面再加上一個點號,如下所示:

%let a = ;數據分析師培訓

%let b = hello;

%let c = %sysfunc(cmiss(&a..,&b..));

%put c = &c.;

最終在日中中,我們會發現這個error已經去掉了。


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢