代码之家  ›  专栏  ›  技术社区  ›  martins

使用putexcel命令在列中循环

  •  0
  • martins  · 技术社区  · 7 年前

    我对变量进行了8个不同的t检验 lnDebt 连续8年(可变 year 2004-2011年) treatment 变量

    bysort year: ttest lnDebt, by(treatment)
    

    使用 putexcel ,我试图得到一个包含8列(2004年、2005年、2011年)和3行(低债务平均值、高债务平均值、平均值中的p值差异)的表。然而,我不能让它循环通过8个不同的年份(列)。到目前为止,我得到的代码是:

    local row=5                          /*I want to start the table in row 5*/
    local ncol=2                         /*I want to start the table in column B*/
    local col: word `ncol' of `c(ALPHA)' /*Preparing the loop through columns B to I*/
    levelsof year, local(years)
    foreach y of local years {
    qui ttest lnDebt1 if year==`y', by(treatment)
    putexcel `col'5=(r(mu_1))
    putexcel `col'6=(r(mu_2))
    putexcel `col'7=(r(p))
    local ++ncol
    }
    

    我不知道为什么,但它只在B列报告了去年的统计数据(2011年)。我想,2004年的统计数据在B列,2005年的统计数据在C列,2006年的统计数据在D列,等等。直到2011年的统计数据在第一列。

    你知道怎么做我想要的桌子吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Nick Cox    7 年前

    代码中的错误是您从未更新本地宏 col . col公司 仅定义一次。当你定义 col公司 它永远不知道,当然也不记得,它是根据电流定义的 ncol . 因此,它不是指针。

    因此,每次在循环中,您只需用迄今为止的最新结果覆盖B列。

    即使在上下文中,这似乎也不是完整的代码,例如,您从不引用 row 定义后。

    local row = 5                          /* start the table in row 5*/
    local ncol = 2                         /* start the table in column B*/
    
    levelsof year, local(years)
    foreach y of local years {
        qui ttest lnDebt1 if year ==`y', by(treatment)
        local col : word `ncol' of `c(ALPHA)'
        putexcel `col'5 = (r(mu_1))
        putexcel `col'6 = (r(mu_2))
        putexcel `col'7 = (r(p))
        local ++ncol
    }