Stata 如何回填数据

Stata 如何回填数据,stata,Stata,我的数据看起来像: n year y 1 2000 1 2000 1 2001 1 2002 6 1 2002 6 1 2003 9 2 2000 2 2000 2 2001 2 2002 1 2 2002 9 2 2003 4 3 2000 3 2001 3 2002 3 3 2002 3 3

我的数据看起来像:

n   year    y
1   2000    
1   2000        
1   2001    
1   2002    6
1   2002    6
1   2003    9
2   2000    
2   2000    
2   2001        
2   2002    1
2   2002    9
2   2003    4
3   2000    
3   2001    
3   2002    3
3   2002    3
3   2003    5
3   2003    5
4   1999    
4   2000    
4   2001    
4   2002    
4   2002    4
我如何用与2002年第一次观测值相对应的
y
值填写2002年之前所有
y
值,并通过
n
执行此操作

例如,对于
n==2
year==2002
的第一个
y
值是
1
。因此,我想用
1
填写2000年和2001年的三个
y
值。新的数据集将是:

n   year    y
1   2000    6
1   2000    6   
1   2001    6
1   2002    6
1   2002    6
1   2003    9
2   2000    1
2   2000    1
2   2001    1   
2   2002    1
2   2002    9
2   2003    4
3   2000    3
3   2001    3
3   2002    3
3   2002    3
3   2003    5
3   2003    5
4   1999    
4   2000    
4   2001    
4   2002    
4   2002    4
请注意,
n==4
2002
之前的年份没有填写,因为
year==2002
的第一次观察是空白的

我认为解决办法可能是:

bysort n: gen temp = y[1] if year==2002
replace y = temp if year<2002
drop temp
bysort n:gen temp=y[1]如果年份==2002
如果年份一个(可能不美观)解决方案,则更换y=温度:

sort n year, stable // [1]
gen y2 = y
by n year: gen _y = y2[1] if year == 2002 // [2]
egen _y2 = max(_y), by(n) // [3]
replace y2 = _y2 if year < 2002 // [4]
drop _*

li, sepby(n) noobs
注:
[1]
stable
选项保留
y
的顺序
[2] 生成的
\u y
仅等于
年==2002年的第一个观测值。请注意,您需要在n年之前进行
,否则
y[1]
n
组的第一次观察,即使在
年!=2002年
(但仅适用于
年==2002年的观察。
[3] 在
n
组中填写
\u y


[4] 替换2002年以前的
y2

来自SSC的mipolate
提供“向后”插值,如下所示:

. ssc inst mipolate 

. bysort n: mipolate y year, gen(y2) backward

. l

     +-------------------+
     | n   year   y   y2 |
     |-------------------|
  1. | 1   2000   .    6 |
  2. | 1   2000   .    6 |
  3. | 1   2001   .    6 |
  4. | 1   2002   6    6 |
  5. | 1   2002   6    6 |
     |-------------------|
  6. | 1   2003   9    9 |
  7. | 2   2000   .    5 |
  8. | 2   2000   .    5 |
  9. | 2   2001   .    5 |
 10. | 2   2002   1    5 |
     |-------------------|
 11. | 2   2002   9    5 |
 12. | 2   2003   4    4 |
 13. | 3   2000   .    3 |
 14. | 3   2001   .    3 |
 15. | 3   2002   3    3 |
     |-------------------|
 16. | 3   2002   3    3 |
 17. | 3   2003   5    5 |
 18. | 3   2003   5    5 |
 19. | 4   1999   .    4 |
 20. | 4   2000   .    4 |
     |-------------------|
 21. | 4   2001   .    4 |
 22. | 4   2002   .    4 |
 23. | 4   2002   4    4 |
     +-------------------+
我提到这一点是因为其他对这个问题感兴趣的人可能会感兴趣。这里的一个关键点是,首先对同一标识符和年份的多个观测值进行平均,这不是您想要的

您对问题的特定版本是高度脆弱的,因为不知何故,您知道几个值的第一个值是要使用的值,但在您显示给我们的数据中没有显示哪个或为什么。对
n年的数据进行排序
,各种重复项中的哪一项最先出现可能会发生变化!这对于数据管理来说是一种危险的情况

. ssc inst mipolate 

. bysort n: mipolate y year, gen(y2) backward

. l

     +-------------------+
     | n   year   y   y2 |
     |-------------------|
  1. | 1   2000   .    6 |
  2. | 1   2000   .    6 |
  3. | 1   2001   .    6 |
  4. | 1   2002   6    6 |
  5. | 1   2002   6    6 |
     |-------------------|
  6. | 1   2003   9    9 |
  7. | 2   2000   .    5 |
  8. | 2   2000   .    5 |
  9. | 2   2001   .    5 |
 10. | 2   2002   1    5 |
     |-------------------|
 11. | 2   2002   9    5 |
 12. | 2   2003   4    4 |
 13. | 3   2000   .    3 |
 14. | 3   2001   .    3 |
 15. | 3   2002   3    3 |
     |-------------------|
 16. | 3   2002   3    3 |
 17. | 3   2003   5    5 |
 18. | 3   2003   5    5 |
 19. | 4   1999   .    4 |
 20. | 4   2000   .    4 |
     |-------------------|
 21. | 4   2001   .    4 |
 22. | 4   2002   .    4 |
 23. | 4   2002   4    4 |
     +-------------------+