2014-10-28 28 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