根据年龄和小组轮次在Stata中删除观察结果

时间:2014-06-24 12:40:06

标签: panel stata

我有一个面板数据集,我想在第一轮调查中放弃那些年龄在40岁以上的受访者。

我尝试了drop if age>40以及drop if age>40 & t==1,其中t是此人所在的调查波的标识符。但是当我做第二次时,我留下的是40岁以上的人。 / p>

以下是我的数据的示例:

pid      age     wave  year of survey
1         20      1      2005
1         21      2      2006
1         22      3      2007 
1         23      4      2008
2         37      1      2006 
2         38      2      2007  
2         39      3      2008
2         40      4      2009
3         40      1      2008
3         41      2      2009
3         42      3      2010
3         43      4      2011

我的目标不是失去第三名受访者,因为他/她在第一次接受调查时属于我的目标年龄组,但他们不是在接下来的调查年份(而不仅仅是留下他/她的第一波如果我只是做drop if age<=40),那么数据和丢弃其他3就是正在做的事情。

还有另外一种方式可以让只有40岁以下的人留下来,同时保留那些在第一波中40岁的人即使他们在随后的波浪中转41,42等吗?我基本上想把我的小组限制在40岁以下的年龄组,同时保持那些40岁的人在他们的波浪中但在随后的波浪中可能超过40岁(我只有4次波浪)。

1 个答案:

答案 0 :(得分:2)

Stata完全满足您的要求。使用drop if age > 40,您只会丢失{strong> age > 40的任何观察。使用drop if age > 40 & wave == 1添加其他条件:如果它同时具有wave == 1则删除它。我认为这很清楚。

我发现你的解释有些矛盾。你不想失去任何来自受访者3的观察,因为在她的第一次浪潮中她不超过40岁,尽管她在她的追随波浪中。但是你说你只想留下40岁以下的人。

以下内容只会删除所有第一波超过40岁的人的观察结果。如果不是您所寻求的,请告诉我们。

clear all
set more off

input ///
pid      age     wave  survyear
1         20      1      2005
1         21      2      2006
1         22      3      2007 
1         23      4      2008
2         37      1      2006 
2         38      2      2007  
2         39      3      2008
2         40      4      2009
3         40      1      2008
3         41      2      2009
3         42      3      2010
3         43      4      2011
4         42      1      2009
4         43      2      2010
4         44      3      2011
4         45      4      2012
end

list, sepby(pid)

*-----

bysort pid (age): drop if age[1] > 40
list, sepby(pid)

您可能想阅读Nick Cox撰写的Speaking Stata: How to move step by: step。另请参阅help subscripting

修改

在不了解数据库结构的情况下,按wave排序应该是一种更通用的方法。这涉及前一代码中的bysort pid (wave): ...。想象一下,一个人连续两次波浪的年龄相同。如果是这样,按age排序将不会产生一致的结果。对于每个人,wave变量可能是唯一标识案例的变量。仔细阅读help sorthelp isid,包括手册条目。