如何保留在整个时间段内都有观察结果的面板?
How to keep panels that have observations through whole time period?
我在 Stata 中有一个不平衡的面板,有 3 年(2006 年、2008 年和 2010 年)和 13,768 个 ID。我执行命令 xtdescribe
并得到:
Freq. Percent Cum. | Pattern*
---------------------------+----------
8265 49.80 49.80 | 111
2672 16.10 65.90 | 1..
2241 13.50 79.40 | 11.
1779 10.72 90.12 | ..1
923 5.56 95.69 | .11
413 2.49 98.17 | .1.
303 1.83 100.00 | 1.1
---------------------------+----------
16596 100.00 | XXX
--------------------------------------
*Each column represents 2 periods.
我想 keep
仅提供对所有三年都有观察结果的 ID。
我试图实现一个简单的命令,比如
keep pid if syear == 2006 & syear == 2008 & syear == 2010
和
keep if syear == 2006 & syear == 2008 & syear == 2010
但它们是错误的,因为在第一种情况下语法无效,在第二种情况下我只是删除了所有观察结果。
如何才能 keep
仅对在整个时间段(2006、2008 和 2010 三年)有观察的 ID 进行观察?
当 Stata 测试条件时,它会通过观察来测试它们。它 不会 查看其他观察结果,除非您使用下标语法强制这样做。现在条件
syear == 2006 & syear == 2008 & syear == 2010
永远不会为真,因为它要求 syear
是同一观察中的 3 个不同值。所以什么都没有保留,一切都被丢弃了。就像说
我 29 岁,31 岁,33 岁
哪个(不管你的年龄)在同一时刻是不正确的。
在你的情况下,这会起作用
bysort pid : keep if _N == 3
这更接近您尝试的逻辑:
bysort pid : egen npanel = total(inlist(syear, 2006, 2008, 2010))
keep if npanel == 3
或者你可以去
bysort pid : egen npanel = total(syear == 2006 | syear == 2008 | syear == 2010)
对于您描述的问题,第一个解决方案是最好的,但其他两个中的技术在其他情况下可能会有所帮助。
我在 Stata 中有一个不平衡的面板,有 3 年(2006 年、2008 年和 2010 年)和 13,768 个 ID。我执行命令 xtdescribe
并得到:
Freq. Percent Cum. | Pattern*
---------------------------+----------
8265 49.80 49.80 | 111
2672 16.10 65.90 | 1..
2241 13.50 79.40 | 11.
1779 10.72 90.12 | ..1
923 5.56 95.69 | .11
413 2.49 98.17 | .1.
303 1.83 100.00 | 1.1
---------------------------+----------
16596 100.00 | XXX
--------------------------------------
*Each column represents 2 periods.
我想 keep
仅提供对所有三年都有观察结果的 ID。
我试图实现一个简单的命令,比如
keep pid if syear == 2006 & syear == 2008 & syear == 2010
和
keep if syear == 2006 & syear == 2008 & syear == 2010
但它们是错误的,因为在第一种情况下语法无效,在第二种情况下我只是删除了所有观察结果。
如何才能 keep
仅对在整个时间段(2006、2008 和 2010 三年)有观察的 ID 进行观察?
当 Stata 测试条件时,它会通过观察来测试它们。它 不会 查看其他观察结果,除非您使用下标语法强制这样做。现在条件
syear == 2006 & syear == 2008 & syear == 2010
永远不会为真,因为它要求 syear
是同一观察中的 3 个不同值。所以什么都没有保留,一切都被丢弃了。就像说
我 29 岁,31 岁,33 岁
哪个(不管你的年龄)在同一时刻是不正确的。
在你的情况下,这会起作用
bysort pid : keep if _N == 3
这更接近您尝试的逻辑:
bysort pid : egen npanel = total(inlist(syear, 2006, 2008, 2010))
keep if npanel == 3
或者你可以去
bysort pid : egen npanel = total(syear == 2006 | syear == 2008 | syear == 2010)
对于您描述的问题,第一个解决方案是最好的,但其他两个中的技术在其他情况下可能会有所帮助。