1

我想测量自事件发生以来的周期数(这里是年)(这里由指标变量表示pos),直到给定数量的领先和滞后(这里是三个)。

下面的代码有效,但看起来很老套,就像我错过了一些基本的东西。是否有更强大的解决方案可以利用内置函数或更好的逻辑?我在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)
}
4

1 回答 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展示一个技巧,但它似乎不需要。

于 2013-03-08T18:39:35.413 回答