0

使用 Stata,我将本地宏 ( macro_name) 定义为一个数据文件中的变量 ( macro_variable)。

读入一个新文件(在同一个do文件中)后,我不再能够引用该宏。

相反,我收到错误:

. di `macro_name'
macro_variable not found

我正在学习如何使用宏,所以请多多包涵。但是,即使我加载新的数据集,我是否也不能display在单个文件中调用或调用该宏?do

例如:

use "newdata.dta", clear

无论我将宏定义为全局还是本地,都会出现此问题。此外,我试图通过创建一个单独的locals.do文件来解决这个问题,该文件包含在我的主do文件的序言中:

include locals.do

但是,我仍然收到上面列出的错误。

宏(本地或全局)在读入新文件后会立即消失吗?根据我所阅读的内容,这似乎不正确。

提前感谢您的任何澄清。

4

2 回答 2

1

考虑以下内容,它指向您的问题的根源,并且在最后一个命令中,准确地再现了您收到的错误消息。

. 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 终止时消失.

于 2017-03-04T16:23:44.597 回答
0

概括我在上面对尼克的评论中写的内容:

宏只维护分配给宏名称的变量/varlist 之间的连接,因此,宏名称所指的变量/varlist 必须在内存中(即包含变量/varlist 的数据集必须在内存中)为了通过宏访问它。

将变量/varlist 分配给宏不会将实际值/元素保留在内存中,而是保持变量/varlist 与分配给它/它们的宏名称之间的连接。

于 2017-03-04T20:36:18.187 回答