Stata:egen rowpctile 一系列值而不是单个百分位值

Stata: egen rowpctile a range of values instead of single percentile value

我有一个包含许多缺失值的变量 var,我想为其计算第 95 个百分位,然后使用此值删除高于第 95 个百分位的观察值(对于那些不缺失变量的观察值).

由于有很多缺失值,我使用 egenrowpctile 来计算 p(#) 百分位数,忽略缺失值。然而,当我查看 p95 值时,它们是一系列不同的值,而不是如下所示的单个第 95 个百分位值:

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

. list p95

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

我是否错误地使用了这个函数,或者有更好的方法来解决这个问题吗?

egen 命令的 rowpctile 函数为每个观察 分别计算变量列表值的百分位数 。这里有一些技巧可以让您走上正确的道路。

. 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 |
     +---------------------------+