2014-10-28 203 views
2

我有一个文件,我喜欢选择几行代码,然后使用Execute (do)按钮运行它们。问题是在do文件中定义了一堆本地宏。我可以运行它们,但是在Stata命令提示符下不能访问本地宏。因此,我认为我应该只使用全局宏。Stata - 全局宏何时被删除?

我看了几个地方,一直没有找到宏变量实际上有什么范围。我意识到,本地宏只定义在它们最初创建的实例中(例如,do文件)。但是对于全局宏,它们是永久存储的,每当我打开一个Stata的新实例时,我仍将拥有全局宏从以前的会议?或者每次我退出Stata(或其他)时都会被删除?

回答

3

全球意味着随处可见,但不是所有时间都可见。

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

当您开始会话时或实际上在任何时候,macro list都会显示在当前语言环境中可见的全局和本地宏。这里“语言环境”不是Stata文档中使用的词语,而是用于表示当前交互式会话,当前程序,do-file编辑器或其选择的当前内容(即当前正在运行的代码)的随机数字。区别在于本地宏只在它们所在的语言环境中可见;全局宏在任何语言环境中都可见。

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

di "$S_DATE" 
di "$S_TIME" 

和Stata将访问操作系统的详细信息。

但最简单的方法来回答你的问题是试验。定义一些全球性的,如

global whoami "bill999" 
di "$whoami" 

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