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 |
+-------------------+