如何让循环第一次做一件事而其他时候做其他事情

时间:2015-08-14 23:06:21

标签: loops stata

说我有这些数据:

clear
set more off
input ///
float (b a_first a_second a_third control)
4 3 2 5 7
6 3 4 2 4
7 6 5 2 5
1 4 2 3 6
7 6 1 4 1
8 8 7 4 4
end

我想使用outreg2创建一个表:

foreach i in first second third {
    reg b a_`i'
    outreg2 using filename, replace
    reg b a_`i' control
    outreg2 using filename, append
}

(请注意,`filename'是您选择的文件名。)这不是我想要的。对于每次迭代,它都会创建一个只有两列的表。下一次,它用两个新的回归替换原来的那些。

我需要它做的只是替换第一次在该开关之后和之后追加:

reg b a_first
outreg2 using filename, replace
reg b a_first control
outreg2 using filename, append
reg b a_second
outreg2 using filename, append
reg b a_second control
outreg2 using filename, append
reg b a_third
outreg2 using filename, append
reg b a_third control
outreg2 using filename, append

我能想到的最好的方法是创建一个本地,如果replace取值i==first,并在第一个outreg2语句中使用此本地。有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

为了完整性,请注意一个经典的替代方案,即在循环外进行第一次迭代:

reg b a_first
outreg2 using filename, replace
reg b a_first control
outreg2 using filename, append


foreach v in second third { 
    reg b a_`v' 
    outreg2 using filename, append
    reg b a_`v' control
    outreg2 using filename, append
}