5

名前が prefix で始まる変数がいくつかありますindoor。後にindoor続くのは数値ではありません (これにより、すべてが単純になります)。

これらの変数ごとに表を作成したいと思います。

私のコードは次のとおりです。

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

問題は、私が望んでいたようindoorに、foreachコマンドが質問indoor*のリストに解決されずに解決されることです。indoorこのため、tabコマンドの後に変数が多すぎて (2 つしか処理できません)、エラーが発生します。

簡単な修正は、最初のコマンドを次のように置き換えることです。

local indoor <full list of indoor questions>

しかし、これは避けたいことです。つまり、これらの変数のすべての名前を見つけて、コードに貼り付ける必要があります。これに対するより迅速な修正があるようですが、私は何も考えられません。

4

4 に答える 4

8

秘訣は、Stataにループ内の値をループするように要求する前に、varlist拡張を使用dsまたは作成することです。 unabforeach

それぞれの例を次に示します。

    ******************! 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

これはうまくいくでしょう。質問のコードとほぼ同じです。

unab indoor : indoor*
foreach i of local indoor {
  tab `i' group, col freq exact chi2
}
于 2011-10-19T19:33:47.170 に答える
1

あなたはこれを行うことができます

foreach i of var `indoor' {
   tab `i' group, col freq exact chi2
}
于 2010-11-03T20:57:39.923 に答える
-1
foreach v of varlist indoo* {
do sth with `v'
}
于 2011-10-15T08:52:48.150 に答える