3

我的数据集中有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.

4

2 回答 2

4

在最新的 Stata 中,search dropmiss或者会告诉您这两个命令都被Stata Journalsearch nmissing所取代。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内存中的数据集尚未被saved.

于 2018-11-28T17:16:33.840 回答
4

您可以简单地遍历数据集中的所有变量,并使用captureandassert命令来测试哪些变量的所有值都丢失了。

这种方法的优点是您可以仅使用内置的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 |
     +---------+
于 2018-11-28T17:19:02.267 回答