Нахождение второго наименьшего значения - PullRequest
0 голосов
/ 03 июля 2018

Для каждого наблюдения я хочу получить второе наименьшее значение из пяти последних наблюдений переменной.

Вы знаете, какую команду я должен использовать?

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input str5 var1 str26 var2 
"Value" "2nd smallest of previous 5" 
"8" "" 
"0" "" 
"4" "" 
"5" "" 
"0" "" 
"6" "0" 
"8" "0" 
"10" "4" 
"8" "5" 
"8" "6" 
end 

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Исходная задача: 2-е из последних 5

Другой способ сделать это состоит в том, что 2-й самый низкий из 5 будет возвращен как нижний квартиль:

. sysuse auto, clear
(1978 Automobile Data)

. quietly su mpg in -5/L , detail

. di r(p25)
23

Пересмотренная проблема: 2-я из предыдущих 5

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input data min2f5 
8 . 
0 . 
4 . 
5 . 
0 . 
6 0 
8 0 
10 4 
8 5 
8 6 
end 

mata:  
    mata clear

    real second(real colvector X) {
        if (rows(X) < 5) return(.) 
        X = sort(X, 1)    
        return(X[2])
    }

end 

gen long id = _n 
* install just once 
ssc inst rangestat 
rangestat (second) data, interval(id -5 -1)

list 

     +------------------------------+
     | data   min2f5   id   second1 |
     |------------------------------|
  1. |    8        .    1         . |
  2. |    0        .    2         . |
  3. |    4        .    3         . |
  4. |    5        .    4         . |
  5. |    0        .    5         . |
     |------------------------------|
  6. |    6        0    6         0 |
  7. |    8        0    7         0 |
  8. |   10        4    8         4 |
  9. |    8        5    9         5 |
 10. |    8        6   10         6 |
     +------------------------------+
0 голосов
/ 03 июля 2018

Я думаю, это то, что вы ищете:

sysuse auto, clear

egen rank = rank(mpg) if _n > `= _N - 5', unique
egen low = total(mpg / (rank == 2)) if _n > `= _N - 5'

list mpg rank low if _n > `= _N - 5'

     +------------------+
     | mpg   rank   low |
     |------------------|
 70. |  23      2    23 |
 71. |  41      5    23 |
 72. |  25      4    23 |
 73. |  25      3    23 |
 74. |  17      1    23 |
     +------------------+
...