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已定义。

4

1 回答 1

3

通过键入任何这些

local myvar "Indicator" 

或者

local myvar = "Indicator" 

或者

local myvar Indicator 

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

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

所以,这将是合法的:

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

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

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

sum Amount if `myvar' == 1 

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

于 2017-03-28T22:18:16.417 回答