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

Stata 如何在整个时间段内保持有观察结果的面板?,stata,data-cleaning,panel-data,Stata,Data Cleaning,Panel Data,我在斯塔塔有一个不平衡的小组,有3年(2006年、2008年和2010年)和13768个ID。我执行命令xtdescripe,得到: Freq. Percent Cum. | Pattern* ---------------------------+---------- 8265 49.80 49.80 | 111 2672 16.10 65.90 | 1.. 2241 13.50 79.40 | 11. 1779 10.7

我在斯塔塔有一个不平衡的小组,有3年(2006年、2008年和2010年)和13768个ID。我执行命令
xtdescripe
,得到:

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

*每列代表2个句点。

我想
保留
所有三年都有观察结果的ID。 我试图实现一个简单的命令,比如

keep pid if syear == 2006 & syear == 2008 & syear == 2010

但它们是错误的,因为在第一种情况下,语法是无效的,而在第二种情况下,我只是删除了所有观察结果


我如何才能仅为在整个时间段(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) 
对于您描述的问题,第一种解决方案是最好的,但其他两种解决方案中的技术在其他情况下也会有所帮助

bysort pid : egen npanel = total(syear == 2006 | syear == 2008 | syear == 2010)