我正在尝试在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
的错误。
答案 0 :(得分: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
本地宏已被定义的事实在这里是无关紧要的;它使用不当。