我想测量自事件发生以来的周期数(这里是几年)(此处由指标变量pos
表示),直到给定数量的线索和滞后(此处为三个)。
以下代码有效,但似乎是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)
}
答案 0 :(得分: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展示一个技巧,但似乎并不需要。