【问题标题】:Using two foreach loops使用两个 foreach 循环
【发布时间】:2020-08-19 09:05:34
【问题描述】:

我有两个foreach 循环:

  1. 正在拧紧仪器[1A、2A、3A、4A]

  2. 正在放松措施 [1b, 2b, 3b, 4b](这不是完全相同的代码)。

我的回归应该同时运行 1 个收紧和 1 个放松措施。我尝试包含两个循环,但一次运行一个度量。如何让它同时运行每个列表的一个变量(总共四个回归)?

local MPPTD "MPP_TD CAP_TD LIQ_TD CRE_TD"
local MPPLD "MPP_LD CAP_LD LIQ_LD CRE_LD" 

foreach instrument of local MPPTD { 
    foreach measure of local MPPLD {

    xtreg `dep'`i' drate `instrument' `measure' interaction`instrument' ///
    interaction`measure' `rhsvar', fe

【问题讨论】:

    标签: loops foreach stata


    【解决方案1】:

    您想要的循环超过四种情况,所以一个循环而不是两个嵌套循环。一般来说,你可能会做类似的事情

     local Alist frog toad newt dragon  
     local Blist Harry Hermione Ron Neville 
    
     forval j = 1/4 { 
          * code in terms of word `j' of `Alist' and word `j' of `Blist' 
     }
    

    还有其他方法可以做到这一点。

    在您的情况下,存在可以利用的简单结构:

    local prefix MPP CAP LI  CRE 
    
    foreach pre of local prefix { 
        * code in terms of `pre'LD and `pre'TD 
    } 
    

    我看不出有人反对

    foreach pre in MPP CAP LI CRE { 
    

    【讨论】:

      【解决方案2】:

      尼克的回答与往常一样。 Extended macro functions 是关键。对于更一般的东西,我喜欢如下实现:

      local MPPTD "MPP_TD CAP_TD LIQ_TD CRE_TD"
      local MPPLD "MPP_LD CAP_LD LIQ_LD CRE_LD"
      assert `:list sizeof MPPTD' == `:list sizeof MPPLD'
          // The above line ensures the 2 locals have the same num of elements
      
      forvalues i = 1/`:list sizeof MPPTD' { 
          local instrument: word `i' of `MPPTD'
          local measure: word `i' of `MPPLD'
          xtreg `dep'`i' drate `instrument' `measure' interaction`instrument' ///
          interaction`measure' `rhsvar', fe
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多