我有长格式的面板数据,面板变量公司id
和每月时间变量在1986m7和2015m12之间。
我希望得到Fama-MacBeth回归的十年测试结果,并将其存储在一个新文件中以便稍后绘制它们。
我想要从1986m7到1996m7进行fmb回归测试,这是1986m8到1996m8的测试版,依此类推,从2005m12到2015m12的最后一次回归。
我首先想到的是我可以使用rolling
命令执行此操作,但我不知道如何告诉Stata只有" roll"随着时间的推移,不是id,或者甚至可以使用此命令。
我的第二个想法是使用while
循环。但是我不知道如何告诉Stata在每次循环之后它应该将局部变量增加一个月。甚至可以将局部变量保存为日期吗?
也许有人知道解决我问题的另一种方法。
另外,将这些测试版存储在新文件中并添加新测试版的解决方案将不胜感激。我想把它们存储为标量然后我不知道如何把标量放回作为一个新的变量。使用滚动命令,这个问题不会是一个,因为它为我创建了一个新变量。
到目前为止,由于120个月(10年)滚动窗口,滚动创意window(120)
到目前为止我所拥有的代码:
use mydata, clear
ssc install xtfbm
xtset id date
rolling _b, clear window(120): xtfmb y x
到目前为止,我对循环理念的代码是什么:
ssc install xtfmb
local i = tm(1986m7)
while `i' <= tm(2005m7) {
use mydata, clear
drop if date < tm(`i')
drop if date >= tm(`i' + "1year")
xtset id date
quietly xtfmb y x
scalar x`i' = _b[x]
local i = `i' + "1month"
}
答案 0 :(得分:0)
一堆声称是答案的评论:
该程序称为Stata,而不是STATA。这是基本的。
xtfbm
可能是xtfmb
的拼写错误。无论哪种方式,我从未使用它,甚至没有看过它,所以不要试图特别提出建议。
更有趣的是,rolling
确实支持面板设置。您可以尝试以下示例:
webuse grunfeld
xtset
rolling _b, window(10): regress invest year
由于您的第一个代码块似乎正在尝试类似的东西,我不清楚您在那里问什么。
你问“甚至可以将局部变量保存为日期吗?”这是倒退,但我想我理解你的意思。 Stata日期只是数字,因此您可以将它们保存到本地宏(在Stata中不被视为变量)。这是合法的:
local t = ym(1986, 7)
while `t' <= ym(2005, 7) {
...
local T = `t' + 12
...
local ++t
}
这会更好:
forval t = `=ym(1986, 7)'/`=ym(2005, 7)' {
...
local T = `t' + 12
...
}
可能看起来更清晰
local t1 = ym(1986, 7)
local t2 = ym(2005, 7)
forval t = `t1'/`t2' {
...
local T = `t' + 12
...
}
但我的建议仍然是尝试rolling
,这会为你完成所有这些。