读取新文件后宏丢失

时间:2017-03-04 15:53:26

标签: stata multiple-files stata-macros

使用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

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

在读取新文件后,宏(本地或全局)会立即消失吗?根据我所读到的内容,这看起来并不合适。

提前感谢您的任何澄清。

2 个答案:

答案 0 :(得分: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编辑器窗口中选择行的子集来提交local命令,那么这些行将被复制到临时的do文件中,并且本地宏的值将在终止时消失。临时的文件。

答案 1 :(得分:0)

将我在上述评论中所写的内容概括为尼克:

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

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