我在foreach循环中使用rolling命令:
use "MyFile.dta"
tsset time, monthly
foreach i of varlist var1 var2 {
rolling _b, window(12) saving(beta_`i'): reg `i' DependentVariable
}
现在,此代码为每个滚动回归保存一个不同的文件。我真正想要的是将从滚动估计获得的每个beta值向量保存为变量。 我想获得的最终结果是一个带有时间变量的数据集和每个滚动的“beta_var#”变量:
time | beta_var1 | beta_var2
_________|___________|__________
1990m1 | ## | ##
1990m2 | ## | ##
... | ## | ##
200m12 | ## | ##
1990m1 | ## | ##
(PS:第二个问题:是否有快捷方式表示varlist =数据集中的所有变量?)
答案 0 :(得分:2)
我误读了你的帖子,我的初步答案没有给出你要求的内容。这是一种方式。不优雅也不高效,但它有效(只需更改目录名称):
clear all
set more off
* Do not mix with previous trials
capture erase "/home/roberto/results.dta"
* Load data
sysuse sp500
tsset date
* Set fixed independent variable
local var open
foreach depvar of varlist high low close volume {
rolling _b, window(30) saving(temp, replace): regress `depvar' `var'
use "/home/roberto/temp.dta", clear
rename (_b_`var' _b_cons) (b_`depvar' b_cons_`depvar')
capture noisily merge 1:1 start end using "/home/roberto/results.dta", assert(match)
capture noisily drop _merge
save "/home/roberto/results.dta", replace
sysuse sp500, clear
tsset date
}
* Delete auxiliary file
capture erase "/home/roberto/temp.dta"
* Check results
use "/home/roberto/results.dta"
browse
也许可以使用postfile
或结合结果向量并使用svmat
转换为数据集来提出其他解决方案。我不确定。
原始回答
将saving()
选项与replace
一起使用,并仅提供一个文件名(删除宏后缀):
clear all
set more off
webuse lutkepohl2
tsset qtr
rolling _b, window(30) saving(results, every(5) replace): regress dln_inv dln_inc dln_consump