Обработка пропущенных значений - PullRequest
0 голосов
/ 19 мая 2018

Рассмотрим следующий игрушечный пример:

. clear
. set obs 10

. generate double random = runiform()

. generate foo = 1
. replace  foo = . if random < 0.50

. generate foo_sum = sum(foo)

. list random foo foo_sum

    +---------------------------+
    |    random   foo   foo_sum |
    |---------------------------|
 1. | .06692297     .         0 |
 2. | .85529108     1         1 |
 3. | .35454616     .         1 |
 4. |  .4995136     .         1 |
 5. | .53638222     1         2 |
    |---------------------------|
 6. | .84661429     1         3 |
 7. | .15198199     .         3 |
 8. | .33054815     .         3 |
 9. | .06141655     .         3 |
10. | .01555962     .         3 |
    +---------------------------+

Учитывая отсутствующие значения в переменной foo, результаты в foo_sum неверны?

1 Ответ

0 голосов
/ 19 мая 2018

Короче, нет.

Результаты вытекают из того факта, что Stata обрабатывает пропущенные наблюдения не так, как ожидалось.

Результаты в foo_sum можно охарактеризовать как нелогично , поскольку:

. display .
.

. display . + 1
.

Однако:

. display sum(.)
0

. display sum(. + 1)
0

Так что же на самом деле здесь происходит?

Похоже, что Stata рассматривает пропущенные значения как ноль в этом случае.

Другой пример:

. generate foo_max = max(foo, foo_sum)

. list

    +-------------------------------------+
    |    random   foo   foo_sum   foo_max |
    |-------------------------------------|
 1. | .06692297     .         0         0 |
 2. | .85529108     1         1         1 |
 3. | .35454616     .         1         1 |
 4. |  .4995136     .         1         1 |
 5. | .53638222     1         2         2 |
    |-------------------------------------|
 6. | .84661429     1         3         3 |
 7. | .15198199     .         3         3 |
 8. | .33054815     .         3         3 |
 9. | .06141655     .         3         3 |
10. | .01555962     .         3         3 |
    +-------------------------------------+

Учитывая, что пропущенные значения в Stata обычно рассматриваются как положительная бесконечность , ожидаемое значение в этом случае составляет ., а не 0 или 3 в наблюдениях 1 и, скажем, 7.

Похоже, что Stata просто игнорирует пропущенное значение!

Приведенные выше примеры иллюстрируют довольно удивительное открытие, которое я недавно сделал во время программирования, и я подумал, что должен поделиться здесь.

...