Stata: egen rowpctile диапазон значений вместо одного процентиля.

У меня есть переменная var со многими пропущенными значениями, для которых я хочу вычислить 95-й процентиль, а затем использовать это значение, чтобы отбросить наблюдения, которые лежат выше 95-го процентиля (для тех наблюдений, которые не пропускают переменную).

Из-за множества отсутствующих значений я использую egen с rowpctile, который должен вычислять p(#) процентиль, игнорируя отсутствующие значения. Однако когда я смотрю на значения p95, они представляют собой диапазон разных значений, а не одно значение 95-го процентиля, как показано ниже:

. egen p95 = rowpctile(var), p(95)

. list p95

     +-----------+
     |       p95 |
     |-----------|
  1. |         . |
  2. |  65.71429 |
  3. |  14.28571 |
  4. |         . |
  5. |         . |
...

Я неправильно использую функцию или есть способ лучше?


person kathystehl    schedule 21.01.2017    source источник
comment
Обычно есть лучший способ проанализировать данные, чем отбрасывать самые высокие 5%.   -  person Nick Cox    schedule 22.01.2017
comment
Согласен @NickCox. Однако это для задания, поэтому я должен выполнить его просьбу, хотя я планирую включить некоторое изложение более строгих способов выявления выбросов.   -  person kathystehl    schedule 22.01.2017


Ответы (1)


Функция rowpctile команды egen вычисляет процентиль значений списка переменных отдельно для каждого наблюдения. Вот несколько приемов, которые должны направить вас на правильный путь.

. sysuse auto, clear
(1978 Automobile Data)

. replace price = . in 1/5
(5 real changes made, 5 to missing)

. summarize price, detail

                            Price
-------------------------------------------------------------
      Percentiles      Smallest
 1%         3291           3291
 5%         3748           3299
10%         3895           3667       Obs                  69
25%         4296           3748       Sum of Wgt.          69

50%         5104                      Mean           6245.493
                        Largest       Std. Dev.      3015.072
75%         6342          13466
90%        11497          13594       Variance        9090661
95%        13466          14500       Skewness       1.594391
99%        15906          15906       Kurtosis       4.555704

. display r(p95)
13466

. generate toobig = price>r(p95)

. list make price if toobig | price==.

     +---------------------------+
     | make                price |
     |---------------------------|
  1. | AMC Concord             . |
  2. | AMC Pacer               . |
  3. | AMC Spirit              . |
  4. | Buick Century           . |
  5. | Buick Electra           . |
     |---------------------------|
 12. | Cad. Eldorado      14,500 |
 13. | Cad. Seville       15,906 |
 27. | Linc. Mark V       13,594 |
     +---------------------------+
person Community    schedule 21.01.2017
comment
Спасибо! Я смог это адаптировать, чтобы получилось идеально. - person kathystehl; 22.01.2017