【问题标题】:Stata ' rolling ' command: saving variables instead of .dta filesStata 'rolling' 命令:保存变量而不是 .dta 文件
【发布时间】:2014-10-26 14:23:58
【问题描述】:

我在 foreach 循环中使用滚动命令:

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 =?)

【问题讨论】:

  • 您可以使用_all*引用所有变量。

标签: stata


【解决方案1】:

我误读了您的帖子,我最初的回答没有给出您的要求。这是一种方法。不优雅也不是很高效,但它可以工作(只需更改目录名称):

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

【讨论】:

  • @Giuseppe,我已经编辑了我的答案。原来的没有给你所要求的。
  • 非常感谢。我只有1个问题。您的代码运行良好,但是当我转到我的数据集时出现问题:rename (_b_var' b_cons) (b_depvar' b_cons_depvar')` 给了我:_oldnames and newnames do not match You specified 1 个模式或名称用于旧名称,2 个模式或名称用于新名称。从常量名称中删除“depvar”后,问题消失了,但随后它覆盖了常量。
  • @Giuseppe,在使用rename 时,old_names 的数量必须与 new_names 的数量相匹配。在调用命令之前,我会检查 rename 正在输入的内容。您可以为此使用display。你引用的错误说你给了一个 old_name 和两个 new_names。检查您的代码以验证两个 old_name 之间是否有空格。还要检查错误出现在循环中的哪个步骤。它在第一个循环中,一个中间循环吗?这将帮助您确定特定变量名称是否存在问题。
  • 如果您需要进一步的帮助,您可以发布一个链接(使用一些云服务)到您的数据库的简化版本(例如所有变量的前 15 个观察值)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多