我目前有一个数据集,显示如下
mnbr uact_id hiredate termdate
9 3709 19510101 20000915
20 9409 20001001 20080601
33 25646 19990201 20000731
mnbr
表示工会中给定工人的成员编号。uact_id
是他们工作的商店,hiredate
和termdate
(给定yyyymmdd)表示他们在商店/uact_id
的给定日期。我目前正在尝试使用Stata中的expand
命令创建一个面板,以便在hiredate
和termdate
的指示符之间,每个成员编号(mnbr
)每年有一次观测。
也就是说,它在理想情况下应该看起来像
mnbr uact_id year
9 3709 1951
9 3709 1952
9 3709 1953
9 3709 1954
等等。对于每年的每个成员编号。
任意假设日期是字符串,我们可以进行
gen year = real(substr(hiredate, 1, 4))
gen duration = real(substr(termdate, 1, 4)) - year + 1
expand duration
bysort mnbr : replace year = year[_n-1] + 1 if _n > 1
如果日期是数字,特别是整数,那么前两行可能是
gen year = floor(hiredate/10000)
gen duration = floor(termdate/10000) - year + 1
replace
步骤在如何将缺失的值替换为前一个或后一个非缺失值或序列中的值?