2013-03-08 35 views
1

我想測量事件發生以來(這裏用指標變量pos表示)的時間段(這裏是幾年),直到給定的導聯數和滯後時間這裏有三個)。確定自事件以來的時間段(最多n個前導/滯後)

下面的代碼工作,但似乎hackish,就像我失去了一些基本的東西。是否有更強大的解決方案利用內置函數或更好的邏輯?我在11.2。謝謝!

version 11.2 
clear 

* generate annual data 
set obs 40 
generate country = cond(_n <= 20, "USA", "UK") 
bysort country: generate year = 1766 + _n 
generate pos = 1 if (year == 1776) 

* generate years since event (up to three) 
encode country, generate(countryn) 
xtset countryn year 
generate time_to_pos = 0 if (pos == 1) 
forvalues i = 1/3 { 
    replace time_to_pos = `i' if (l`i'.pos == 1) 
    replace time_to_pos = -1 * `i' if (f`i'.pos == 1) 
} 

回答

2

明確的問題。

這可以縮短。這是一種方法。與您的代碼開始建立一個沙坑

version 11.2 
clear 
* generate annual data 
set obs 40 
generate country = cond(_n <= 20, "USA", "UK") 
bysort country: generate year = 1766 + _n 

現在是

gen time_to_pos = year - 1776 if abs(1776 - year) <= 3 

這是所有似乎需要你的榜樣。如果你想推廣到每個面板中的多個事件,我想知道這些事件的規則。

我打算展示http://www.stata-journal.com/article.html?article=dm0055的技巧,但它並不需要。

+0

謝謝,尼克。很乾淨。 – 2013-03-08 19:01:21

+0

其實,實現這個我意識到了一個問題。並非每個假人都是1776年,並且因國家(大約30個國家)而異。你認爲有一種方法可以將「if」條件引用到「pos」嗎? – 2013-03-08 19:38:35

+0

將1776概括爲變量名? – 2013-03-09 08:39:10