何时删除全局宏?

时间:2014-10-28 18:52:46

标签: variables global stata local stata-macros

我有一个do文件,我想从中选择几行代码,然后使用Execute (do)按钮运行它们。问题是这个do文件中定义了一堆本地宏。我可以运行它们,但是在Stata命令提示符下无法访问本地宏。因此,我认为我应该只使用全局宏。

我已经查看了几个地方并且无法找出宏变量实际具有的范围。我意识到本地宏只在最初创建它们的实例中定义(例如,do文件)。

但对于全局宏,它们是永久存储的吗?每次我打开一个新的Stata实例时,我仍然会拥有之前会话的全局宏?

或者每当我退出Stata(或其他东西)时它们会被删除吗?

1 个答案:

答案 0 :(得分:3)

全球意味着无处不在,但并非始终如此。

您创建的全局宏在会话结束时消失。

当你开始一个会话时,或者确实在任何时候,macro list显示当前语言环境中可见的全局和本地宏。这里" locale"不是Stata文档中使用的单词,而是用于表示当前交互式会话,当前程序,do-file编辑器的当前内容或其选择的nonce硬币,即当前运行的代码。不同之处在于,本地宏只能在定义它们的语言环境中可见;全局宏在任何语言环境中都可见。

有些全局宏似乎是动态创建的;因此,如果我希望显示当前日期或时间,我可以

 di "$S_DATE"
 di "$S_TIME"

并且Stata将访问操作系统以获取此类详细信息。

但回答你问题的最简单方法就是试验。定义一些全局的例如

 global whoami "bill999"
 di "$whoami" 

然后注销并开始一个新会话,看看它是否由Stata保存。或者,save当前数据集和use新会话中的相同数据集,并查看全局变量是否在旅程中存活。

另见help notes