この質問はオプションのコンテキストにありtwoway line
ますby()
が、より大きな問題は、すべてのイベント ウィンドウを先験的に知ることなく、2 番目 (および後続のすべて) のイベント ウィンドウを識別する方法だと思います。
以下に、1990 年代と 2000 年代の 5 か国のデータをいくつか生成します。outcome
すべての国で 1995 年にイベントが発生し、カナダでのみ 2005 年にイベントが繰り返されます。各国の各イベントを中心に 5 年間にわたってプロットしたいと思います。と を使用してこれを行うtwoway line
とby()
、カナダは同じプロット ウィンドウに 2 回プロットされます。
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
ですか?ありがとう!