这个问题twoway line
与by()
选项有关,但我认为更大的问题是如何识别第二个(以及所有后续)事件窗口,而无需先验地知道每个事件窗口。
下面我生成了 1990 年代和 2000 年代五个国家的一些数据。在所有国家,1995 年都会发生事件,而在加拿大,只有 2005 年事件会重复发生。我想以outcome
每个国家的每个事件为中心绘制五年。如果我使用twoway line
and执行此操作by()
,则 Canada 在同一个绘图窗口中绘制两次。
clear
set obs 100
generate year = 1990 + mod(_n, 20)
generate country = "United Kingdom" in 1/20
replace country = "United States" in 21/40
replace country = "Canada" in 41/60
replace country = "Australia" in 61/80
replace country = "New Zealand" in 81/100
generate event = (year == 1995) ///
| ((year == 2005) & (country == "Canada"))
generate time_to_event = 0 if (event == 1)
generate outcome = runiform()
encode country, generate(countryn)
xtset countryn year
forvalue i = 1/2 {
replace time_to_event = `i' if (l`i'.event == 1)
replace time_to_event = -`i' if (f`i'.event == 1)
}
twoway line outcome time_to_event, ///
by(country) name(orig, replace)
手动解决方案添加一个occurrence
变量,该变量按国家/地区对每个事件发生进行编号,然后添加occurrence
到by()
选项中。
generate occurrence = 1 if !missing(time_to_event)
replace occurrence = 2 if ///
(inrange(year, 2005 - 2, 2005 + 2) & (country == "Canada"))
twoway line outcome time_to_event, ///
by(country occurrence) name(attempt, replace)
这在比赛数据中效果很好,但在我的真实数据中,有更多的国家和更多的赛事。我可以手动编码这个occurrence
变量,但这很乏味(现在我真的很好奇是否有一个有效的工具或逻辑:))。
是否有自动识别窗口的逻辑?或者至少可以使用的一种twoway line
?谢谢!