如何使用引用变量的本地宏?

How do I use a local macro referencing a variable?

我正在尝试在 Stata 中创建一个宏,它将设置一个变量名供我稍后在我的 do 文件中引用。本质上,我正在尝试用本地宏替换变量名。

示例数据集如下:

ID   Indicator1 Indicator2    Amount
1    1            0             10
2    0            1             2
3    0            0             3
4    1            0             5
5    1            1             20

我的数据有很多指标,但我一次只需要处理一个指标。我想将我当前正在使用的指标放入一个宏中,这样我只需更改整个代码中的一件事。

我的代码是:

local myvar = "Indicator"

我想要的是能够使用这样的东西:

sum Amount if "`myvar'" == 1

但是,即使已经定义了 myvar,我仍然收到错误 "type mismatch"

通过输入任何这些

local myvar "Indicator" 

local myvar = "Indicator" 

local myvar Indicator 

您将文字文本 Indicator 放在名称为 myvar 的本地宏中。本例中的 " " 是分隔符,如最后一个示例所示,在本例中是可有可无的。到目前为止,一切都很好。

但是,在您的 summarize 语句中使用 " " 向 Stata 表明您打算将评估(取消引用)本地宏的结果视为文字字符串;并且文字字符串只能与另一个文字字符串或字符串变量的内容进行比较,由其名称指示。因此错误消息 type mismatch

所以,这是合法的:

sum Amount if "`myvar'" == "1"

什么都不会发生,因为 "indicator" 不等于 "1",所以该陈述将是错误的(在它被尝试的每个观察中)。但 Stata 的语法没有问题。

但这不是你想要的。您希望本地宏内容被视为变量名,这意味着写

sum Amount if `myvar' == 1 

本地宏已经定义的事实在这里并不重要;它使用不当。