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

问题描述 投票:0回答:1

我正在尝试在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

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

variables stata local stata-macros
1个回答
2
投票

通过键入任何这些

local myvar "Indicator" 

要么

local myvar = "Indicator" 

要么

local myvar Indicator 

您将文字文本Indicator放在名为myvar的本地宏中。本例中的" "是分隔符,并且如最后一个示例所示,在这种情况下是可有可无的。到现在为止还挺好。

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

所以,这是合法的:

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

什么都不会发生,因为"indicator"不等于"1",所以声明将是假的(在每次观察中都是为了尝试)。但是Stata对语法没有任何问题。

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

sum Amount if `myvar' == 1 

已定义本地宏的事实在这里是无关紧要的;它使用不当。

© www.soinside.com 2019 - 2024. All rights reserved.