【问题标题】:foreach command in StataStata中的foreach命令
【发布时间】:2020-06-22 11:02:33
【问题描述】:

我正在使用面板数据,其中变量 countrynum 是 138 个国家/地区的国家编号,icr 是自变量。要进行可池性测试,我必须运行以下代码来获取变量 icr_1、icr_2、icr_3 ... icr_138。

但是,代码只生成icr_1。有人可以帮我理解为什么吗?我需要所有 138 个变量。


xi, prefix(C) i.countrynum

gen Ccountrynum_1=1 if countrynum==1

replace Ccountrynum_1=0 if countrynum!=1

foreach var of varlist icr {
    foreach num of numlist 1(1)138{
        gen `var'_`num'=`var'* Ccountrynum_`num' 
    }
} 

【问题讨论】:

    标签: foreach panel stata


    【解决方案1】:

    您的代码中有一些我会做不同的事情,但我没有看到任何会引发错误的东西。我认为建议一种更简单的方法来解决您似乎正在做的事情,而不是调试代码:

    separate icr, by(countrynum)
    

    xi 是一个较旧的命令,已被因子变量表示法取代,因此您只需要 xi 以防您使用不支持此功能的较旧命令,我认为这里不是这种情况.

    按照我的理解,要进行可池性测试,您可以使用i.countrynum 运行回归,如下所示:

    reg y x1 x2 x... i.countrynum
    testparm i.countrynum
    

    testparm 的输出将告诉您国家虚拟变量是否联合显着。

    【讨论】:

      【解决方案2】:

      我不会轻易理解这一点。我们首先要注意

      gen Ccountrynum_1=1 if countrynum==1
      replace Ccountrynum_1=0 if countrynum!=1
      

      简化为

      gen Ccountrynum_1 = countrynum == 1 
      

      也就是说,双循环

      foreach var of varlist icr {
          foreach num of numlist 1(1)138{
              gen `var'_`num'=`var'* Ccountrynum_`num' 
          }
      } 
      

      简化为单个循环

      forval num = 1/138 {
          gen icr_`num' = icr * Ccountrynum_`num' 
      } 
      

      也就是说,很难理解为什么该代码应该可以工作,因为您只解释了Ccountrynum_1 的生成。

      需要这么多额外变量真的很不寻常。除了@Wouter Wakker 的建议,tabulate, generate() 允许在必要时生成指标变量而无需循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多