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不是定义标量的好方法。在程序中将一条消息定义为文本字符串几乎总是最简单最好的。
你问什么显然是你的真正问题的最小版本,但同样我不知道真正的问题是什么。