5

我有许多名称以前缀开头的变量indoor。之后indoor的不是数字(这会使一切变得更简单)。

我想要每个变量的表格。

我的代码如下:

local indoor indoor*  
foreach i of local indoor {  
    tab `i' group, col freq exact chi2  
}

问题是,indoorforeach命令中解决indoor*而不是indoor问题列表,正如我所希望的那样。由于这个原因,该tab命令后面有太多变量(它只能处理两个),这会导致错误。

简单的解决方法是将第一个命令替换为:

local indoor <full list of indoor questions>

但这是我想避免的,即必须找到这些变量的所有名称,然后将它们粘贴到代码中。似乎有一个更快的解决方法,但我想不出任何方法。

4

4 回答 4

8

诀窍是在要求 Stata 循环遍历循环中的值之前使用dsunab创建 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*

**用于为循环ds创建您的 VARLIST foreach

    ds indoor*
    di "`r(varlist)'"
    local indoorvars `r(varlist)'

    local n  0
    foreach i of local indoorvars {

**让我们通过一些标题来清理您的表格display

    local ++n
    di in red "--------------------------------------------"
    di in red "Table `n':  `:var l `i'' by `:var l group'"
    di in red "--------------------------------------------"

**你tab的桌子

    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如果您想使用棘手的选择规则来选择室内变量,例如根据变量标签中的信息或其他一些特征选择室内变量,则可以发挥优势。

于 2010-09-19T02:33:54.310 回答
1

你可以这样做

foreach i of var `indoor' {
   tab `i' group, col freq exact chi2
}
于 2010-11-03T20:57:39.923 回答
1

这会奏效。它几乎与问题中的代码相同。

unab indoor : indoor*
foreach i of local indoor {
  tab `i' group, col freq exact chi2
}
于 2011-10-19T19:33:47.170 回答
-1
foreach v of varlist indoo* {
do sth with `v'
}
于 2011-10-15T08:52:48.150 回答