Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 如何使用引用变量的本地宏?_Variables_Stata_Local_Stata Macros - Fatal编程技术网

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

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

我试图在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
已经被定义。

通过键入其中任何一个

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