tt1*_*977 6 loops stata stata-macros
我有许多名称以前缀开头的变量indoor.接下来的indoor不是数字(这会使一切变得更简单).
我想为每个变量制作一个表格.
我的代码如下:
local indoor indoor*
foreach i of local indoor {
tab `i' group, col freq exact chi2
}
Run Code Online (Sandbox Code Playgroud)
问题是indoor在foreach命令中解析indoor*而不是indoor问题列表,正如我所希望的那样.出于这个原因,该tab命令后面跟着太多变量(它只能处理两个),这会导致错误.
简单的解决方法是用第一个命令替换:
local indoor <full list of indoor questions>
Run Code Online (Sandbox Code Playgroud)
但这是我想要避免的,那就是必须找到这些变量的所有名称,然后将它们粘贴到代码中.似乎有一个更快的解决方案,但我想不出任何.
诀窍是在要求Stata循环遍历循环中的值之前使用ds或unab创建varlist扩展foreach.
以下是每个例子:
******************! 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*
Run Code Online (Sandbox Code Playgroud)
**ds用于为foreach循环创建变量列表:
ds indoor*
di "`r(varlist)'"
local indoorvars `r(varlist)'
local n 0
foreach i of local indoorvars {
Run Code Online (Sandbox Code Playgroud)
**让我们清理你的表格与一些标题通过VIA display
local ++n
di in red "--------------------------------------------"
di in red "Table `n': `:var l `i'' by `:var l group'"
di in red "--------------------------------------------"
Run Code Online (Sandbox Code Playgroud)
**你的tab表格
tab `i' group, col freq chi2 exact nolog nokey
}
******************! END EXAMPLE
Run Code Online (Sandbox Code Playgroud)
或使用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
Run Code Online (Sandbox Code Playgroud)
的优势ds来发挥作用,如果你想用一个棘手的选择规则,如选择基于变量标签或一些其他特征信息室内瓦尔选择您的室内瓦尔.
小智 1
你可以这样做
foreach i of var `indoor' {
tab `i' group, col freq exact chi2
}
Run Code Online (Sandbox Code Playgroud)