Условно создать новые наблюдения - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть данные в следующем формате (есть еще много переменных):

year    ID Dummy
1495    65  1
1496    65  1
1501    65  1
1502    65  1
1520    65  0
1522    65  0

Я пытаюсь добиться условного создания новых наблюдений, которые заполняют данные между двумя точками во времени с условной привязкой. Если фиктивная переменная равна 1, данные должны быть заполнены. Если переменная равна 0, то она не должна быть заполнена.

Например:

year    ID Dummy
1495    65  1
1496    65  1
1497    65  1
1498    65  1
.
.
1501    65  1
1502    65  1
1503    65  1
1504    65  1
.
.
.
1520    65  0
1522    65  0

1 Ответ

0 голосов
/ 07 сентября 2018

Вот один из способов сделать это:

clear

input year id dummy 
1495    65  1
1496    65  1
1501    65  1
1502    65  1
1520    65  0
1522    65  0
end

generate tag = year[_n] != year[_n+1] & dummy == 1
generate delta = year[_n] - year[_n+1] if tag
replace delta = .  if abs(delta) == 1
expand abs(delta) if tag & delta != .
sort year

bysort year: egen seq = seq() if delta != .
replace seq = seq - 1 
replace seq = 0 if seq == .
replace year = year + seq if year != .

drop tag delta seq

Приведенный выше фрагмент кода даст:

list

     +-------------------+
     | year   id   dummy |
     |-------------------|
  1. | 1495   65       1 |
  2. | 1496   65       1 |
  3. | 1497   65       1 |
  4. | 1498   65       1 |
  5. | 1499   65       1 |
     |-------------------|
  6. | 1500   65       1 |
  7. | 1501   65       1 |
  8. | 1502   65       1 |
  9. | 1503   65       1 |
 10. | 1504   65       1 |
     |-------------------|
 11. | 1505   65       1 |
 12. | 1506   65       1 |
 13. | 1507   65       1 |
 14. | 1508   65       1 |
 15. | 1509   65       1 |
     |-------------------|
 16. | 1510   65       1 |
 17. | 1511   65       1 |
 18. | 1512   65       1 |
 19. | 1513   65       1 |
 20. | 1514   65       1 |
     |-------------------|
 21. | 1515   65       1 |
 22. | 1516   65       1 |
 23. | 1517   65       1 |
 24. | 1518   65       1 |
 25. | 1519   65       1 |
     |-------------------|
 26. | 1520   65       0 |
 27. | 1522   65       0 |
     +-------------------+
...