如何保留在整个时间段内都有观察结果的面板?

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) 

对于您描述的问题,第一个解决方案是最好的,但其他两个中的技术在其他情况下可能会有所帮助。