我有一个面板数据集,我想在第一轮调查中放弃那些年龄在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次波浪)。
答案 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 sort
和help isid
,包括手册条目。