如何识别Stata中循环的最后一次迭代

时间:2015-12-11 21:11:55

标签: loops stata

我使用{% for address in image.address %} <img src="{{ address|e('html_attr') }}"> {% endfor %} 制作了TeX表格。根据帮助文件

  

outreg2不能将TeX格式表相互附加,所以       回归必须以ASCII形式附加,直到最后一次回归,       附加了tex选项。

因此,当我在循环中运行几个回归时,我需要以某种方式识别最后一个循环以添加tex选项。

我的尝试:使用outreg2我设法为第一个循环指定选项local append,为后续循环指定选项replace。是否有类似的东西将选项append添加到最后一个循环?

tex

2 个答案:

答案 0 :(得分:3)

您可以使用word count宏扩展函数(请参阅help extended_fcn)来确定要循环的列表中的元素数,并在循环中添加一个计数器来计算循环数。使用if命令(help ifcmd),您可以识别最终循环,并相应地更改outreg2的选项。

请注意foreach循环语法的更改,因为您直接使用global

global dvars var1 var2 var3
local iterations : word count $dvars
local i = 0

foreach dvar of global dvars {
    // augment iteration counter
    local ++i

    // define options (over-specified, but you can revise as desired)
    if `i' == 1 local options "replace"
    else if `i' > 1 & `i' < `iterations' local options "append"
    else if `i' == `iterations' local options "append tex"

    // run regression & outreg2
        // for now, just display command
    *reg `dvar' treatment
    di as result `"outreg2 using "file", `options'"'
}

di as result "number of loops = `i'"

答案 1 :(得分:1)

无需查找迭代编号或创建计数器宏。在这种情况下,foreach循环的最终迭代是在调用dvars last 变量时发生的。

以下是使用Stata的auto玩具数据集的最小可重复示例:

sysuse auto, clear

local dvars mpg weight length
local append "replace"

foreach dvar in `dvars' {
    display "regress `dvar' i.foreign"
    if `dvar' == length local tex tex
    display `"outreg2 using "file", `append' `tex'"'
    local append "append"
}

regress mpg i.foreign
outreg2 using "file", replace 
regress weight i.foreign
outreg2 using "file", append 
regress length i.foreign
outreg2 using "file", append tex

请注意,最好使用局部宏而不是全局宏 可能的话。