Максимум предыдущих значений для сгруппированных наблюдений - PullRequest
2 голосов
/ 20 сентября 2019

Данные

* Example generated by -dataex-. To install: ssc install dataex
clear
input float(id year ppi)
3647 2004 36
3647 2005 39
3647 2006 35
3647 2007 40
3647 2008 41
3647 2009 36
3648 2004 35
3648 2005 37
3648 2006 36
3648 2007 41
3648 2008 39
3648 2009 35
end

Код

Я использую команду egen для создания переменной на основе максимума предыдущегонаблюдений, но вместо этого я получаю максимум всех наблюдений.

bys id year: egen ppi_max = max(ppi)

list ppi_max

     +---------+
     | ppi_max |
     |---------|
  1. |      36 |
  2. |      39 |
  3. |      35 |
  4. |      40 |
  5. |      41 |
     |---------|
  6. |      36 |
  7. |      35 |
  8. |      37 |
  9. |      36 |
 10. |      41 |
     |---------|
 11. |      39 |
 12. |      35 |
     +---------+

Вопрос

Что мне нужно сделать, чтобы получить следующий вывод:

.  
36  
39  
39  
40  
41  
.  
35  
37  
37  
41  
41 

1 Ответ

1 голос
/ 21 сентября 2019

У меня работает следующее:

generate wanted = .
bysort id (year): replace wanted = max(wanted[_n-1], ppi[_n-1])

list wanted, sepby(id)

     +----------------------------+
     |   id   year   ppi   wanted |
     |----------------------------|
  1. | 3647   2004    36        . |
  2. | 3647   2005    39       36 |
  3. | 3647   2006    35       39 |
  4. | 3647   2007    40       39 |
  5. | 3647   2008    41       40 |
  6. | 3647   2009    36       41 |
     |----------------------------|
  7. | 3648   2004    35        . |
  8. | 3648   2005    37       35 |
  9. | 3648   2006    36       37 |
 10. | 3648   2007    41       37 |
 11. | 3648   2008    39       41 |
 12. | 3648   2009    35       41 |
     +----------------------------+
...