Stata 为每个循环添加与循环变量相对应的变量

Stata 为每个循环添加与循环变量相对应的变量,stata,Stata,我有两个变量message_一和message_二 在变量上循环时,如果vari是varone,我想显示消息_one,如果vari是vartwo,我想显示消息_two 我想做的是不同的,但这是一个例子 我正在做以下事情,但它不起作用 foreach vari in varone vartwo { local suffix "one" if `vari'==varone local suffix "two" if `vari'==vartwo display(message_`suffix')

我有两个变量message_一和message_二

在变量上循环时,如果vari是varone,我想显示消息_one,如果vari是vartwo,我想显示消息_two

我想做的是不同的,但这是一个例子

我正在做以下事情,但它不起作用

foreach vari in varone vartwo {

local suffix "one" if `vari'==varone
local suffix "two" if `vari'==vartwo

display(message_`suffix')

}
我应该如何更改本地线路以使其正常工作

也就是说,我想为每个循环添加一个与循环变量相对应的变量。

if条件在这里不起作用。通常,它识别满足某些条件的观测值。特别是,在将内容分配给宏时,没有隐式循环覆盖观测值,因此没有必要限定局部。因此,您的语法可能会导致非法语法消息不起作用,而不是一个精确的问题报告

但是,请注意

 local foo if 2 == 2 
只是将文本(如果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中,这不是定义标量的好方法。在程序中将消息定义为文本字符串几乎总是最简单和最好的

你所问的显然是你真正问题的最低版本,但同样,我也不知道真正的问题是什么