引子
local的使用是一次性的。
比如,
clear
set obs 100
gen oldvar=1
local a "myvar"
generate `a' = oldvar
generate a = oldvar
一共六行命令,和local相關的是第四行和第五行,這兩行一定要一起選中一起運行,不可以單獨運行,否則會報錯。
這里,四五行分開運行時,第五行運行后,報錯“too few variables specified”
如果用global的話,就可以單獨運行。
clear
set obs 100
gen oldvar=1
global a "myvar"
generate $a = oldvar
generate a = oldvar
注意: local的暫元調用是單引號:` ' ,global的暫元調用是美元符號:$ .
在具體使用上,local只在這一次運行中有用,用完立馬消失,不留下痕跡。--局部宏
global定義了之后,只要這個stata主窗口沒退出,global的定義就可以一直用,換do file或者換數據都可以。--全局宏
具體介紹
Stata的暫元其實就是一種“別名"( alias)
全局暫元 vs.局部暫元
“局部暫元”( local macro)之所以稱為“局部”(loca),是因為其所定義的暫元僅在定義它的do文件中才有效,一旦此do文件執行完畢,則其中所定義的局部暫元將不復存在。反之,“全局暫元"”( global macro)則在do文件執行完畢后仍存在(即使你打開另外的數據集),直至徹底退出Stata程序才會消失。
定義局部暫元的一般句型為
local name value
與局部暫元類似,定義全局暫元的一般句型為
global name value
在 Stata內部,將全局暫元與局部暫元視為兩類不同的事物,並在局部暫元之前加下划線;比如,分別記為“_letter"(全局暫元)與“ letter”(局部暫元)
顯示或刪除暫元
如果想顯示當前所有的暫元,可使用如下命令
macro list
letter: A B C
S_E_depv: price
S_E_cmd: regress
S_E_vce: Robust
S_level: 95
S_ADO: BASE;SITE;.;PERSONAL;PLUS;OLDPLACE
_count: 4
_letter1: A B C
_letter: A B C
其中,“letter” 是名為 letter 的全局暫元,而 “letter” 是名為 letter 的局部暫元。以 “S” 開頭的暫元為 “系統暫元”(system macro),不會被刪除。如果要刪除上面的某個暫元,比如 “_letter1”,可使用命令
. macro drop _letter1
如果要刪去除系統暫元之外的所有暫元,可使用命令
. macro drop _all