Loops 如何在循环的最后一次迭代中添加outreg2的tex选项

Loops 如何在循环的最后一次迭代中添加outreg2的tex选项,loops,stata,Loops,Stata,我正在使用社区贡献的命令outreg2生成一个LaTeX表 根据帮助文件: outreg2无法将TeX格式的表相互追加,因此 回归必须以ASCII格式追加,直到最后一次回归, 它附加了tex选项 因此,当我在一个循环中运行几个回归时,我需要以某种方式确定最后一个迭代,以便添加tex选项 在我自己的尝试中,通过使用localappend我设法为第一个循环指定选项replace,并为后续循环指定选项append: global dvars var1 var2 var3 local append "

我正在使用社区贡献的命令
outreg2
生成一个
LaTeX

根据帮助文件:

outreg2无法将TeX格式的表相互追加,因此 回归必须以ASCII格式追加,直到最后一次回归, 它附加了tex选项

因此,当我在一个循环中运行几个回归时,我需要以某种方式确定最后一个迭代,以便添加
tex
选项

在我自己的尝试中,通过使用
localappend
我设法为第一个循环指定选项
replace
,并为后续循环指定选项
append

global dvars var1 var2 var3

local append "replace"
foreach dvar in $dvars {
    reg `dvar' treatment
    outreg2 using "file", `append'
    local append "append"
}

是否有类似的方法将选项
tex
添加到最后一个循环

您可以使用
字数计数
宏扩展功能(请参阅
帮助扩展\u 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'"
全局dvars var1 var2 var3
本地迭代:字数$dvars
局部i=0
全球dvar的每个dvar{
//增广迭代计数器
本地++i
//定义选项(过度指定,但您可以根据需要进行修改)
如果'i'==1本地选项“替换”
如果'i'>1&'i'<'iterations'本地选项“append”
如果'i'=='iterations'本地选项“append tex”
//运行回归&outreg2
//现在,只需显示命令
*reg“dvar”治疗
di作为结果`“outreg2使用“文件”`options''
}
di作为结果“循环数=`i'”

您可以使用
字数计数
宏扩展功能(请参阅
帮助扩展功能)
)来识别正在循环的列表中的元素数,并在循环中添加计数器以计数循环数。使用
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'"
全局dvars var1 var2 var3
本地迭代:字数$dvars
局部i=0
全球dvar的每个dvar{
//增广迭代计数器
本地++i
//定义选项(过度指定,但您可以根据需要进行修改)
如果'i'==1本地选项“替换”
如果'i'>1&'i'<'iterations'本地选项“append”
如果'i'=='iterations'本地选项“append tex”
//运行回归&outreg2
//现在,只需显示命令
*reg“dvar”治疗
di作为结果`“outreg2使用“文件”`options''
}
di作为结果“循环数=`i'”

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

下面是一个使用Stata的
auto
toy数据集的最小可复制示例:

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
请注意,最好使用本地宏,而不是全局宏
只要有可能。无需查找迭代编号或创建计数器宏。在这种情况下,
foreach
循环的最后一次迭代发生在调用
dvars
的最后一个变量时

下面是一个使用Stata的
auto
toy数据集的最小可复制示例:

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
请注意,最好使用本地宏,而不是全局宏 只要有可能