Variables 如何使用引用变量的本地宏?
我试图在Stata中创建一个宏,该宏将为我设置一个变量名,以便以后在我的Variables 如何使用引用变量的本地宏?,variables,stata,local,stata-macros,Variables,Stata,Local,Stata Macros,我试图在Stata中创建一个宏,该宏将为我设置一个变量名,以便以后在我的do文件中引用。本质上,我试图用本地宏替换变量名 示例数据集如下所示: ID Indicator1 Indicator2 Amount 1 1 0 10 2 0 1 2 3 0 0 3 4 1 0 5 5
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
已经被定义。通过键入其中任何一个
local myvar "Indicator"
或
或
将文本指示符
放在名为myvar
的本地宏中。本例中的“
是分隔符,如最后一个示例所示,在本例中是不必要的。到目前为止,一切顺利
但是,在summary
语句中使用“
向Stata表明,您打算将计算(取消引用)本地宏的结果视为文字字符串;一个文本字符串只能与另一个文本字符串或字符串变量的内容(由其名称表示)进行比较。因此出现错误消息类型不匹配
因此,这是合法的:
sum Amount if "`myvar'" == "1"
不会发生任何事情,因为“indicator”
不等于“1”
,因此该语句将是错误的(在尝试该语句的每个观察中)。但是
斯塔塔在语法上没有问题
但这不是你想要的。您希望本地宏内容被视为变量名,这意味着写入
sum Amount if `myvar' == 1
本地宏已被定义这一事实在这里并不重要;它使用不当 多谢各位。如果``myvar'==1`,我尝试使用sum Amount,但这次的错误是
==1无效名称
,即使它已被定义。这可能意味着本地宏此时不可见。这是在块中运行do文件的常见副作用,例如一次运行一行。Local的意思是:Local(一段代码)。要进行测试,请在尝试使用宏之前尝试显示它:macro list
将执行此操作,或者di“`myvar'
。补救方法是不要分块运行文件,或者在任何情况下都不要确保local
定义可见。哦,好的。问题是我正在分块运行do文件。现在可以用了。:)
sum Amount if "`myvar'" == "1"
sum Amount if `myvar' == 1