if
條件在這裏不起作用。一般來說,它確定了滿足某些條件的觀測值。特別是,因爲在將內容分配給宏時沒有隱含的循環觀察,所以這沒有意義作爲限定local
。所以,你的語法可能會產生一個非法的語法消息(「不起作用」永遠不是一個精確的問題報告)。
但是,注意,像
local foo if 2 == 2
的效果僅僅是文本if 2 == 2
複製到本地宏foo
。
你想要什麼也許更像
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
是一個預定義的變量(在這種情況下,你會看到它的值顯示在第一觀察)或一個預定義的標量。但是,在一個變量存儲單個文本消息是不必要的,尤其是如果相同的文字被用在了所有的觀察,因爲這將是與像
gen foo = "this message"
在Stata不是定義標量的好方法。在程序中將一條消息定義爲文本字符串幾乎總是最簡單最好的。
你問什麼顯然是你的真正問題的最小版本,但同樣我不知道真正的問題是什麼。