考虑以下内容,它指向您的问题的根源,并且在最后一个命令中,准确地再现了您收到的错误消息。
. do "/var/folders/xr/lm5ccr996k7dspxs35yqzyt80000gp/T//SD08491.000000"
. local macro_name macro_variable
. macro list _macro_name
_macro_name: macro_variable
. display "`macro_name'"
macro_variable
. display `macro_name'
macro_variable not found
r(111);
end of do-file
在编辑中添加:以上是从 do-file 编辑器窗口运行的。当我改为启动 Stata 并将四个命令粘贴到命令窗口中时,一次运行一行,结果如下。
. local macro_name macro_variable
. macro list _macro_name
_macro_name: macro_variable
. display "`macro_name'"
macro_variable
. display `macro_name'
macro_variable not found
r(111);
.
display
冒着过度解释的风险,我的原始答案的要点是,在我的两个示例中,在原始帖子中以及在最终命令中显示的错误消息是由于未能在命令中包含引号,这导致display
认为“macro_variable”,即分配给本地宏“macro_name”的值不是字符串常量,而是变量名或标量,并且display
无法通过该名称定位变量或标量。
让我补充一下,locals.do
原始帖子中描述的使用没有希望工作,因为local
宏是执行它们的 do-file 的本地文件,并在该 do-file 终止时消失。特别是,如果您local
通过在 do-file 编辑器窗口中选择行的子集来提交命令,这些行将被复制到临时 do-file 中,并且本地宏的值在临时 do-file 终止时消失.