总结哪个事件先发生
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 开始
有很多应用
such as applications to "any" and "all" questions, which include "ever" and "never"
这里使用 egen
作为主力是很自然的,因为您需要同时处理每个标识符的观察结果和每个历史记录。
中介绍了一些技巧
我有个人的面板数据,他们的婚姻状况(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 开始
有很多应用
such as applications to "any" and "all" questions, which include "ever" and "never"
这里使用 egen
作为主力是很自然的,因为您需要同时处理每个标识符的观察结果和每个历史记录。