Использование формулы роста для сгруппированных наблюдений - PullRequest
0 голосов
/ 03 мая 2019

У меня есть набор данных, который показан ниже:

clear

input year price growth id
2008 5  -0.444  1
2009 .  .       1
2010 7  -0.222  1   
2011 9   0      1
2011 8  -0.111  1
2012 9   0      1
2013 11  0.22   1 
2012 10  0      2      
2013 12  0.2    2
2013 .  .       2  
2014 13  0.3    2    
2015 17  0.7    2
2015 16  0.6    2    
end

Я хочу сгенерировать переменную growth, которая является ростом price.Формула роста:

growth = price of second-year - price of base year / price of base year

Базовый год всегда 2012.

Как я могу сгенерировать эту growth переменную для каждой группы наблюдений (id)?

Ответы [ 2 ]

2 голосов
/ 04 мая 2019

Базовая цена может быть выбрана напрямую по egen:

bysort id: egen price_b = total(price * (year == 2012))
generate wanted = (price - price_b) / price_b

Обратите внимание, что total используется вместе с предположением, что для каждого id у вас есть только одно наблюдение с year = 2012.

1 голос
/ 03 мая 2019

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

bysort id: generate obs = _n
generate double wanted = .

levelsof id, local(ids)

foreach x of local ids {
    summarize obs if id == `x' & year == 2012, meanonly 
    bysort id: replace wanted = (price - price[`=obs[r(min)]']) /    ///
                                 price[`=obs[r(min)]'] if id == `x'
}

Если значения id являются последовательными, то следующее будет быстрее:

forvalues i = 1 / 2 {
    summarize obs if id == `i' & year == 2012, meanonly 
    bysort id: replace wanted = (price - price[`=obs[r(min)]']) /    ///
                                 price[`=obs[r(min)]'] if id == `i'
}

Результаты:

list, sepby(id)

     +-----------------------------------------------+
     | year   price   growth   id   obs       wanted |
     |-----------------------------------------------|
  1. | 2008       5    -.444    1     1   -.44444444 |
  2. | 2009       .        .    1     2            . |
  3. | 2010       7    -.222    1     3   -.22222222 |
  4. | 2011       9        0    1     4            0 |
  5. | 2011       8    -.111    1     5   -.11111111 |
  6. | 2012       9        0    1     6            0 |
  7. | 2013      11      .22    1     7    .22222222 |
     |-----------------------------------------------|
  8. | 2012      10        0    2     1            0 |
  9. | 2013      12       .2    2     2           .2 |
 10. | 2013       .        .    2     3            . |
 11. | 2014      13       .3    2     4           .3 |
 12. | 2015      17       .7    2     5           .7 |
 13. | 2015      16       .6    2     6           .6 |
     +-----------------------------------------------+
...