У меня есть данные панели за год t1
до t2
. Некоторые люди вводят образец после t1
и / или выходят из образца до t2
. Для эффективности (большая выборка) набор данных содержит строки только для тех лет, когда наблюдаются отдельные лица.
Я хочу добавить новое наблюдение для каждого человека, содержащее год после , когда человек оставил выборку. Итак, если кто-то ушел, скажем, в 2003 году, я хочу, чтобы новое наблюдение содержало идентификатор человека и значение 2004
в переменной year. Любая другая переменная в этом наблюдении должна отсутствовать.
Это мой подход с использованием образца набора данных:
webuse nlswork, clear
* Here goes plenty of lines of codes modifying the dataset ... for generality *
timer on 1
preserve
keep id year
bysort id (year) : keep if _n == _N
replace year = year + 1
save temp.dta, replace
restore
append using temp.dta
sort id year
erase temp.dta
timer off 1
timer list
Я думаю, что это может быть немного неэффективно, поскольку включает сохранение / восстановление, сохранение / удаление дополнительной базы данных и добавление, все относительно длительные действия. Что-то вроде tsfill, last
было бы удивительно, но такой опции не существует. Кто-нибудь знает о более эффективном методе? Приведенный выше код включает таймер, поэтому любой может сравнить его с другим методом.