If statement Stata-如果本地变量中包含变量名,则运行代码

If statement Stata-如果本地变量中包含变量名,则运行代码,if-statement,stata,locals,If Statement,Stata,Locals,我希望Stata中有一个if条件,仅当某个变量的名称包含在local中时,该条件才会为该变量运行大括号中的代码。例如 if (`variable` element of `variablenames_local`) { gen variable2 = variable + 2 } 如何在Stata中实现这一点?您可以使用扩展宏函数来实现这一点,这些函数记录在帮助扩展\u fcn中。在这种情况下,帮助宏列表非常有用。(我从不记得那些帮助文件的名称,而是通常键入帮助宏或帮助本地,然后按照该

我希望Stata中有一个
if
条件,仅当某个变量的名称包含在
local
中时,该条件才会为该变量运行大括号中的代码。例如

if (`variable` element of `variablenames_local`) {
    gen variable2 = variable + 2
}

如何在Stata中实现这一点?

您可以使用扩展宏函数来实现这一点,这些函数记录在
帮助扩展\u fcn
中。在这种情况下,
帮助宏列表
非常有用。(我从不记得那些帮助文件的名称,而是通常键入
帮助宏
帮助本地
,然后按照该帮助文件中的链接进行操作。)


这只是为了强调第二种风格要好得多。可能有一些你没有说的上下文,但是只选择一次你想要的变量比一个一个地选择要好。在上面的例子中@NickCox是绝对正确的。在解析复杂语法元素时,我偶尔会用到第一个技巧。
sysuse auto, clear

local vars "price mpg foreign"

foreach var of varlist _all {
    if `: list var in vars' {
        di "do something smart with `var'"
    }
}

// alternatively:
foreach var of varlist `vars' {
    di "do something smart with `var'"
}