Исходная задача: 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 |
+------------------------------+