删除所有缺失值的变量

时间:2018-11-28 17:05:26

标签: stata stata-macros

我的数据集中有5000个变量和91,534个观测值。

我想删除所有缺少所有值的变量:

X1     X2    X3
1      2      .
.      3      .
3      .      .
.      5      .

X1     X2
1      2  
.      3   
3      . 
.      5  

我尝试使用dropmiss 社区贡献的命令,但是即使阅读了帮助文件,该命令似乎也无法正常工作。例如:

dropmiss 
command dropmiss is unrecognized
r(199);

missings dropvars
force option required with changed dataset

相反,按照其中一种解决方案的建议,我尝试了以下操作:

ssc install nmissing
nmissing, min(91534)  
drop `r(varlist)'

这个替代性的社区贡献命令似乎对我有用。

但是,我想知道是否有更优雅的解决方案,或者使用dropmiss的方式。

3 个答案:

答案 0 :(得分:3)

在最新的Stata中,search dropmisssearch nmissing都会告诉您,这两个命令都被 Stata Journal 中的missings取代。

以下对话框可能会阐明您的问题:

. sysuse auto , clear
(1978 Automobile Data)

. generate empty = .
(74 missing values generated)

. missings dropvars
force option required with changed dataset
r(4);

. missings dropvars, force

Checking missings in make price mpg rep78 headroom trunk weight length turn
    displacement gear_ratio foreign empty:
74 observations with missing values

note: empty dropped

missings dropvars一旦安装,将删除所有完全丢失的变量,但如果尚未force d内存中的数据集,则需要save选项。

答案 1 :(得分:3)

您可以简单地循环遍历数据集中的所有变量,并使用captureassert命令测试哪些变量的所有值均缺失。

这种方法的优势在于,您只能使用内置 Stata命令执行此操作:

clear

input X1 X2 X3
1 2 .
. 3 .
3 . .
. 5 .
end

list
     +--------------+
     | X1   X2   X3 |
     |--------------|
  1. |  1    2    . |
  2. |  .    3    . |
  3. |  3    .    . |
  4. |  .    5    . |
     +--------------+

foreach var of varlist _all {
    capture assert missing(`var')
    if !_rc {
        drop `var'
    }
}

list
     +---------+
     | X1   X2 |
     |---------|
  1. |  1    2 |
  2. |  .    3 |
  3. |  3    . |
  4. |  .    5 |
     +---------+

答案 2 :(得分:-2)

直接输入以下内容即可:

ssc install missings
missings dropvars _all

这将删除所有观察值都缺失的变量。