0

ローカル マクロを使用して、Stata の変数名の一部をループする必要があります。

これが私がやろうとしたことです:

local phth mep mibp mbp
tab lod_`phth'_BL

Stata は変数名全体を認識しません。

variable lod_mep not found
r(111);

「phth」の後のアンダースコアを削除しても、マクロ名の後のものは認識されません。

foreach複雑なループは避けたい。

単純なマクロを使用するだけでこれを行う方法はありますか? ありがとう!

4

1 に答える 1

3

あなたの要求は少し混乱しています。第一に、これはまさにループの目的であり、第二に、Stata のループは (「入門レベル」では) 非常に単純です。次の例は少し無意味ですが (構造を考えれば、もっと簡単な方法があります)、基本的な考え方を伝える必要があります。

// set up a similar variable name structure
sysuse auto , clear
rename (price mpg weight length) /// 
       (pref_base1_suff pref_base2_suff pref_base3_suff pref_base4_suff)

// define a local macro to hold the elements to loop over
local varbases = "base1 base2 base3 base4"

// refer to the items of the local macro in a loop
foreach b of local varbases {
    summ pref_`b'_suff
}

help foreachの構文については、を参照してくださいforeach特に、Stata のvarlist構造 (「参考文献」を参照)により、上記で使用した構造が不要になる場合があることに注意してくださいhelp varlist。たとえば、上記のコードを続けると、次のようになります。

foreach v of varlist pref_base?_suff {
    summ `v'
}

ワイルドカード?は 1 文字の代わりになります。*より柔軟に使用できます。ただし、変数がvarlistで許可されているパターン マッチングを使用しても簡単に識別できない場合は、最初の例のようなループは非常に単純です (4 行の非常に短いコード)。


あとがき

さらに熟考すると (質問の構造が特定の方法を固定している場合もありますが、代わりのアプローチがより簡単な場合もあります)、ヘルプ ファイルで集計コマンド ( help tabulate) に関する情報を検索すると、次の構文が表示されます。tab1 varlist [if] [in] [weight] [, tab1_options]

varlistsの使用に関する上記の説明を考えると、単純にコーディングできます。

tab1 lod_m*_BL

もちろん、度数分布表を報告したくないパターンに一致する変数が他にないことを前提としています。あるいは、

tab1 lod_mep_BL lod_mibp_BL lod_mbp_BL

ワイルドカードやマクロ置換を使用しなくても、それほど長くはなく、トリックを実行します。

于 2015-10-15T22:37:03.550 に答える