我有两个变量message_one和message_two。
在循环变量时,我想显示message_one,如果" vari"是varone,并显示message_two,如果" vari"是vartwo。
我想做的不同,但这是一个例子。
我正在执行以下操作,但它不起作用。
foreach vari in varone vartwo {
local suffix "one" if `vari'==varone
local suffix "two" if `vari'==vartwo
display(message_`suffix')
}
如何更改本地行以使其正常工作?
也就是说,我想添加一个与每个循环的循环变量相对应的变量。
答案 0 :(得分:1)
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
命令与if
限定符完全不同。
我必须在这里猜测你想要的东西。
首先,我在猜测中添加了双引号,表示您想直接比较字符串。如果你想要别的东西,请解释一下。
第二,像
这样的陈述display(message_one)
当且仅当message_one
是预定义变量(在这种情况下,您将在第一个观察中看到其值的显示)或预定义标量时,才会起作用。但是,在变量中存储单个文本消息是不必要的,特别是如果在每个观察中重复相同的文本,就像在
中那样。 gen foo = "this message"
在Stata中,这不是定义标量的好方法。只是将消息定义为程序中的文字文本字符串几乎总是最简单和最好的。
你问的问题显然是你真正问题的最小版本,但同样我也不知道那个真正的问题是什么。