2

変数の存在を確認する方法については、すでに質問しました。ニック・コックスが答えた。次に、回答を変更してループを使用しようとしましたforeachが、うまくいきませんでした:

foreach var in var1 var2 var3 {
capture su `var', meanonly
if _rc == 0 {
local varMean = r(mean)
local varMin = r(min)
local varMax = r(max)
}
else display `var' "DOES NOT EXIST"
}

私もof代わりに使用しようとしましたin...まだ結果はありません。メッセージが表示 var2 not foundされ、実行が停止します。?captureの前に付ける必要がありforeachますか? 私はそれを試しました...うまくいきませんでしたか?

4

1 に答える 1

8

これは少し微妙です。

var2それが存在しないことを考えると、Stataはまだ(elseブランチ内で)指示されています

 display `var' "DOES NOT EXIST"

これは次のように解釈されます

 display var2 "DOES NOT EXIST" 

だから、それは最初に見ます

 display var2

と解釈する傾向があります。

 display var2[1] 

-- 最初の観測値 -- しかし、前述のvar2ように存在せず、Stata は不平を言っています。

あなたが望むのはvar2、その内容ではなく名前を表示することです(これもまた存在しません)。修正は単純です

 else display "`var' DOES NOT EXIST"

display二重引用符区切り文字の位置は、存在しないものの名前を強制するために重要です。存在しないものの名前は単なる任意のテキストであり、Stata はそのようなテキストに問題はありません。

要するに、display

  "`macro'" 

は表示する文字列ですが、

 `macro' 

表示される変数またはスカラーの名前、または表示される内容が定義されたマクロです。

ちなみに、ループは以前に保存された結果のセットを上書きするだけですが、おそらくそのうちにそれを取得するでしょう。

于 2013-06-02T19:44:12.660 に答える