【问题标题】:Making foreach go through all values of a variable + return the current value使foreach遍历变量的所有值+返回当前值
【发布时间】:2022-01-18 16:40:26
【问题描述】:

我想使用 Stata 常见问题解答 here 构建迭代。第二种方法似乎适合我的情况。我已经构建了以下代码:

levelsof ID, local(levels)
foreach l of local levels {
    var var1 var2 if ID == `l', lags(1/4) vsquish
    vargranger
}

想法:遍历ID 中的所有ID,然后执行vargranger。但是,它运行一次,然后输出no observations。这不是真的,因为我的搜索变量中有 200 个 ID。

我要添加到循环中的第二件事是ID 中使用的当前 ID 的 return / print 函数。

对于ID 的每个值,输出应如下所示:

ID = XYZ

Sample:  2001 - 2019                            Number of obs     =         16
...

vargranger

   Granger causality Wald tests
  +------------------------------------------------------------------+
  |          Equation           Excluded |   chi2     df Prob > chi2 |
  |--------------------------------------+---------------------------|
  |         var1                    var2 |  11.617     4    0.020    |
  |         var1                     ALL |  11.617     4    0.020    |
  |--------------------------------------+---------------------------|
  |         var2                    var1 |  6.2796     4    0.179    |
  |         var2                     ALL |  6.2796     4    0.179    |
  +------------------------------------------------------------------+

【问题讨论】:

    标签: loops foreach stata


    【解决方案1】:

    当前级别的display很简单,说:

    levelsof ID, local(levels)
    foreach l of local levels {
        di "{title:`l'}" _n 
        count if !missing(var1, var2) & ID == `l'
        var var1 var2 if ID == `l', lags(1/4) vsquish
        vargranger
    }
    

    “无观察”报告可能来自var,并不能反映您拥有多少标识符。您应该像上面那样添加检查(例如)您必须使用多少观察。

    【讨论】:

    • 谢谢尼克!实际上正在等待您的回复,它完全按照我的预期工作。是的,你是对的,我忘了var 可能会因为没有观察而停止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多