if
の条件はここでは機能しません。一般に、それは何らかの条件を満たす観測を識別する。特に、内容をマクロに割り当てる際には、暗黙的にループを監視する必要がないため、修飾としては意味がありません。local
したがって、あなたの構文の可能性のある結果は、不正な構文メッセージです(「動作しません」というのは決して正確な問題報告ではありません)。
しかし、
local foo if 2 == 2
のようなものの効果はちょうど地元のマクロfoo
にテキストif 2 == 2
をコピーすることであることに注意してください。
何がしたいことは、より
foreach vari in varone vartwo {
di cond("`vari'" == "varone", "one", "two")
}
ように、おそらくですが、単一の直接の文が足りるように、そのループは無意味です:
di "one" _n "two"
あなたが代わりにこれを行うことができます:
foreach vari in varone vartwo {
if "`vari'" == "varone" di "one"
else di "two"
}
ここのif
コマンドは、とはかなり異なります修飾子。
私はあなたがここで欲しいものを推測しなければなりませんでした。
まず、文字列を直接比較したいと思っていたことに二重引用符を追加しました。あなたが他のものを望むなら、説明してください。
第二に、
display(message_one)
のような文はmessage_one
が事前定義された変数(あなたが最初の観測では、その値の表示を見ることになる場合)、または事前に定義されたスカラーた場合にのみ動作します。しかし、変数に単一のテキストメッセージを保存することは、スカラーを定義するための良い方法ではないのStataで
gen foo = "this message"
のようなものとなりますように同じテキストは、すべての観測で繰り返される場合は特に、不要です。メッセージをプログラム内のリテラルテキスト文字列として定義することは、ほとんどの場合、ほとんどの場合、最も簡単で最善です。
あなたの質問は、あなたの本当の問題の最小限のバージョンであることは明らかですが、同様に私はその本当の問題が何であるか分かりません。