1

このコードが Stata で機能しないのはなぜですか? それが私に与えるエラーは次のとおりです。

* invalid name

しかし、私が使用するとき

sexd1 sexd2 

それ以外の

sexd*        

それは正常に動作します。sexd*Stata のコマンド ボックスにコマンドを入力しているときに、ローカルとして正常に動作します。

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

local list_of_variables weight midpoint_hhinc
tabulate sex, gen(sexd)
local sexd sexd*

foreach i in `list_of_variables'{
    foreach j in `sexd'{
        generate `i'_`j' = `i' * `j'
    }
}
4

1 に答える 1

3

foreach...inforeach...の間には重要な違いがありますofforeach... inStata にリストの要素を文字通り取るように指示するため、解釈はありません。

だからStataは解釈する

 foreach j in `sexd' {
     generate `i'_`j' = `i' * `j'
 }

なので

(ステップ1)

 foreach j in sexd* {

(ステップ2)

 generate `i'_sexd* = `i' * sexd*

また、ローカル マクロ の現在の値を置き換えますが、 を変数名の一部にすることはできないiため、コードは失敗します。*

逆に、foreach...の使用inは完全に合法ですが、要約することができます。私はあなたのコードを次のように書き直します

 tabulate sex, gen(sexd)
 foreach i in weight midpoint_hhinc {
     foreach j of var sexd* {
         generate `i'_`j' = `i' * `j'
     }
 }

これは部分的にスタイルの問題です。構文エラーは 1 つだけですが、名前を直接参照できる場合、ローカル マクロに名前を入れても何のメリットもないことに注意してください。

とは言っても、これは相互作用変数を生成するコードのように見えますが、ほとんどの Stata モデリング コマンドでは相互作用をその場で参照できます。

http://www.stata-journal.com/sjpdf.html?articlenum=pr0005foreachにかなり詳細なチュートリアルがあります

于 2013-02-08T13:18:20.750 に答える