NLSY79是一项小组调查,记录了个人的年龄,但在某些年份它会跳过这个问题并将其编码为-5。该数据集是1979年至1994年之间的年度数据,然后在2012年之前成为两年一次。因此,个人的样本数据可能如下所示:
caseid_1979 year age
73 1988 25
73 1989 26
73 1990 -5
73 1991 -5
73 1992 -5
73 1993 30
73 1994 30
73 1996 32
73 1998 -5
73 2000 36
所以我的问题是我如何编程Stata以便填写缺失的年龄值?我意识到,在某些年份,这个人的生日还没有发生,所以这个年龄可能连续几年重复,我不知道该做什么(如果有的话)。
答案 0 :(得分:2)
在这种情况下,我们可以确信每个人的年龄是或应该是每年的线性。所以我们有一个插值练习。
clonevar age2 = age
replace age2 = . if age2 == -5
ipolate age2 year, generate(age3) by(caseid_79) epolate
bysort caseid_79 (year) : assert age3 == age3[1] + (year - year[1])
如果您想允许1年的容差,请说
bysort caseid_79 (year) : assert inlist(age3 - age3[1] + year - year[1], 0, 1)
另见this FAQ, which discusses replaces missing values in sequences