诀窍是在要求Stata循环访问foreach
循环中的值之前,使用ds
或unab
创建varlist扩展。
这里的每个的一个示例:
******************! BEGIN EXAMPLE
** THIS FIRST SECTION SIMPLY CREATES SOME FAKE DATA & INDOOR VARS **
clear
set obs 10000
local suffix `c(ALPHA)'
token `"`suffix'"'
while "`1'" != "" {
g indoor`1'`2'`3' = 1+int((5-1+1)*runiform())
lab var indoor`1'`2'`3' "Indoor Values for `1'`2'`3'"
mac shift 1
}
g group = rbinomial(1,.5)
lab var group "GROUP TYPE"
** NOW, YOU SHOULD HAVE A BUNCH OF FAKE INDOOR
**VARS WITH ALPHA, NOT NUMERIC SUFFIXES
desc indoor*
** USE ds
创建你varlist中FOR THE foreach
LOOP:
ds indoor*
di "`r(varlist)'"
local indoorvars `r(varlist)'
local n 0
foreach i of local indoorvars {
** LET'S清理表A位,且某些标头VIA display
local ++n
di in red "--------------------------------------------"
di in red "Table `n': `:var l `i'' by `:var l group'"
di in red "--------------------------------------------"
**你[R tab
TABLES
tab `i' group, col freq chi2 exact nolog nokey
}
******************! END EXAMPLE
或使用unab
代替:
******************! BEGIN EXAMPLE
unab indoorvars: indoor*
di "`indoorvars'"
local n 0
foreach i of local indoorvars {
local ++n
di in red "--------------------------------------------"
di in red "Table `n': `:var l `i'' by `:var l group'"
di in red "--------------------------------------------"
tab `i' group, col freq chi2 nokey //I turned off exact to speed things up
}
******************! END EXAMPLE
的ds
的优势来发挥作用,如果你想用一个棘手的选择规则,如基于信息选择室内瓦尔选择您的室内瓦尔在可变标签或其他特征中。
这混合了-foreach-一点的语法。帮助手册表明你想要使用“varlist var1 var2的foreach i”,其中var1和var2是变量,或者使用“foreach i of local indoor”,而不是像上面的例子那样合并它们。然而,在这个例子中,如果你在本地'indoor'中有一个不符合在-varlist-中命名变量规则的列表,那么var_external的'foreach i'中的varlist扩展将会失败并让用户感到困惑。 – 2010-12-30 05:36:45
只要你理解Stata在执行命令之前解包本地/全局宏,它并不是很糟糕。 – Keith 2011-10-19 19:34:36