訣竅是在要求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