【问题标题】:forvalues with two indexes具有两个索引的值
【发布时间】:2017-06-13 00:26:40
【问题描述】:

我想遍历 Stata 中的两个不同值,一个公司标识符和一个年份变量,并对每个组合执行回归。 代码应该看起来像这样。

    gen unexplained = .
    forvalues j = 1/16 {
       forvalues t = 2010/2016 {
       quietly reg y x if firm_id == `j' & year == `t', nocon
       predict error, residuals
       quietly replace unexplained = error if firm_id == `j' & year == `t'
       drop error
       }
    }

因此应该有 16 x 6 = 96 个独立的回归。

不幸的是,我得到了一个

no observations 
r(2000) 

错误信息。我知道我索引错误。

【问题讨论】:

  • 你可能想看看statsby
  • 这个错误有几个可能的原因。错误来自第一次回归吗? yx 是数字吗?分组变量呢?此外,您应该得到16 * 7 回归。
  • statsby 不会帮助计算残差。
  • 亲爱的@YDavis,您当然是对的。有16 x 7 回归。其余的由考克斯先生的解决方案解决。

标签: loops for-loop stata


【解决方案1】:

一个答案是检查每个回归有多少观察可用,并且只有在您有足够的回归值得时才检查regress。选择一个小数字,后果自负。

gen unexplained = .

quietly forvalues j = 1/16 {
    forvalues t = 2010/2016 {
        count if !missing(y, x) & firm_id == `j' & year == `t'
        if r(N) >= 7 { 
            reg y x if firm_id == `j' & year == `t', nocon
            predict error, residuals
            replace unexplained = error if firm_id == `j' & year == `t'
            drop error
        }
    }
}

包含计数的变量也可能有用:

bysort firm_id year: egen available_n = total(!missing(y, x))

【讨论】:

  • 非常感谢考克斯先生。我不知道可能没有足够的观察。该解决方案非常有效。
猜你喜欢
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
相关资源
最近更新 更多