总结哪个事件先发生

Summarize which event came first

我有个人的面板数据,他们的婚姻状况(0 = 未婚,1 = 已婚)和一次随机休克(0 = 没有休克,1 = 休克)。现在对于经历过冲击的人(除 id1 之外的所有人),我想知道哪些人在经历冲击时已经结婚(n=2,id3,id5),谁在经历冲击时没有结婚但随后结婚了 (n=1, id2) 并且当他们经历了震惊并且后来没有结婚时还没有结婚 (n=1, id4)。

* Example generated by -dataex-. For more info, type help dataex
clear
input int year str3 id float(shock maritalstatus)
2010 "id1" 0 1
2011 "id1" 0 1
2012 "id1" 0 1
2013 "id1" 0 0
2014 "id1" 0 0
2015 "id1" 0 0
2010 "id2" 1 0
2011 "id2" 0 1
2012 "id2" 0 1
2013 "id2" 0 1
2014 "id2" 0 1
2015 "id2" 0 1
2010 "id3" 0 1
2011 "id3" 0 1
2012 "id3" 0 1
2013 "id3" 1 1
2014 "id3" 0 1
2015 "id3" 0 1
2010 "id4" 1 0
2011 "id4" 0 0
2012 "id4" 0 0
2013 "id4" 0 0
2014 "id4" 0 0
2015 "id4" 0 0
2010 "id5" 0 1
2011 "id5" 0 1
2012 "id5" 1 1
2013 "id5" 0 1
2014 "id5" 0 1
2015 "id5" 0 1
end

感谢您提供数据示例。

通过查看每个观察结果可以确定震惊到来时是否已婚,但诀窍在于将其传播到同一标识符的所有观察结果。

egen married_at_shock = total(marital == 1 & shock == 1), by(id)

下一个变量是同一主题的变体。

egen not_married_at_shock = total(marital == 0 & shock == 1), by(id)

最后一个变量对我来说似乎更难。我认为你必须明确地计算出震惊发生的时间

egen when_shock = mean(cond(shock == 1, year, .)), by(id)

然后查看之后发生了什么

egen never_married_after_shock = total(marital & year > when_shock), by(id)

replace never_married_after_shock = never_married == 0 if when_shock < . 

tabdisp id, c(*married*)

----------------------------------------------------------------------------
       id |     married_at_shock  not_married_at_shock  never_married_afte~k
----------+-----------------------------------------------------------------
      id1 |                    0                     0                     0
      id2 |                    0                     1                     0
      id3 |                    1                     0                     0
      id4 |                    0                     1                     1
      id5 |                    1                     0                     0
----------------------------------------------------------------------------

毫无疑问,还有其他方法可以解决这个问题。

任何阅读列表都以强调 true 和 false 条件分别产生 1 和 0 开始

as discussed in this FAQ

有很多应用

such as applications to "any" and "all" questions, which include "ever" and "never"

这里使用 egen 作为主力是很自然的,因为您需要同时处理每个标识符的观察结果和每个历史记录。

中介绍了一些技巧

this paper.