【问题标题】:Dropping observations in Stata based on age and panel round基于年龄和面板轮数在Stata中删除观察值
【发布时间】:2014-06-24 12:40:05
【问题描述】:

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

我尝试做drop if age>40drop if age>40 & t==1,其中 t 是该人所在调查波的标识符。但是,当我做第二个时,剩下的人是 40 岁以上的人。

以下是我的数据的示例:

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 波)。

【问题讨论】:

  • 我在此处删除了经济学标签,因为我认为它没有帮助。

标签: panel stata


【解决方案1】:

Stata 为您提供您所要求的一切。使用drop if age > 40,您只会丢失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,包括手册条目。

【讨论】:

  • 非常感谢。它工作正常。一个小的澄清:如果年龄 40。但是,使用第一种方法,我剩下的受访者出现少于 4 波(这是我小组的全部持续时间),而当使用您建议的方法时,我只有出现在所有 4 波中的受访者,这就是我想要的。我很困惑为什么在这两种情况下淘汰的受访者数量相同,但每个受访者成功完成的波数不同
  • 你的两个语句不能等价!给定的代码使用不同的运算符。更一般地说,如果没有可重复的示例,我们将无法轻松评估您的报告。
  • @NickCox 非常感谢:表格太长,无法粘贴到此处,但发生的情况是,如果年龄>40 我确实放弃了,我在做完之后会留下一个 (n = 2670):xttab当我对 pid(年龄)进行排序时,年龄和 n 完全相同:如果年龄 [1] > 40,则下降。因为我想观察每个人的 4 个波,所以我做了:gen one=1,然后是:egen mycount=count(新),按(pid)。当我使用 drop if age>40 命令放弃时,我得到 mycount相同
  • 这两种方法,而 mycount 变量似乎又因使用的方法而异
  • 即使是经验丰富的 Stata 用户也面临着将这些东西牢记在心并完全理解的挑战。如果没有一个可重复的示例,您可以任意小,只要它显示了您认为的问题,就很难理解让您感到困惑的地方。
猜你喜欢
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2014-09-29
  • 2018-03-15
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多