删除所有缺失值的变量

Jyo*_*hsa 4 stata stata-macros

我的数据集中有5000变量和观察结果。91,534

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

X1     X2    X3
1      2      .
.      3      .
3      .      .
.      5      .
Run Code Online (Sandbox Code Playgroud)

X1     X2
1      2  
.      3   
3      . 
.      5  
Run Code Online (Sandbox Code Playgroud)

我尝试使用dropmiss 社区贡献的命令,但即使在阅读帮助文件后,它似乎对我不起作用。例如:

dropmiss 
command dropmiss is unrecognized
r(199);

missings dropvars
force option required with changed dataset
Run Code Online (Sandbox Code Playgroud)

相反,按照解决方案之一的建议,我尝试了以下方法:

ssc install nmissing
nmissing, min(91534)  
drop `r(varlist)'
Run Code Online (Sandbox Code Playgroud)

这个社区提供的替代命令似乎对我有用。

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

Nic*_*Cox 5

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

下面的对话可能会解答你的问题:

. 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
Run Code Online (Sandbox Code Playgroud)

missings dropvars一旦安装,将删除所有完全丢失的变量,除非force内存中的数据集尚未被save删除,否则您需要该选项。


小智 5

您可以简单地循环数据集中的所有变量,并使用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 |
     +---------+
Run Code Online (Sandbox Code Playgroud)