Удалить переменные со всеми пропущенными значениями

Я имею 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,

2 ответа

Решение

В современной стате либо search dropmiss или же search nmissing скажет вам, что обе команды заменены missings из журнала Stata.

Следующий диалог может осветить ваш вопрос:

. sysuse auto , clear
(1978 Automobile Data)

. gen 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 вариант, если набор данных в памяти не был saveд.

Вы можете просто перебрать все переменные в вашем наборе данных и использовать capture а также assert Команды для проверки, у каких из них отсутствуют все их значения.

Преимущество этого подхода в том, что вы можете сделать это только с помощью встроенных команд 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 |
     +---------+

Прямой подход заключается в наборе:

ssc install missings
missings dropvars _all

Это отбросит все переменные, чьи наблюдения все отсутствуют.

Другие вопросы по тегам