删除所有缺失值的变量

Drop variables with all missing values

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

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

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

X1     X2
1      2  
.      3   
3      . 
.      5  

我尝试使用 dropmiss community-contributed 命令,但即使阅读了帮助文件,它似乎对我也不起作用。例如:

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

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

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

. 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 选项,如果内存中的数据集尚未 saved。

您可以简单地遍历数据集中的所有变量,并使用 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 |
     +---------+