引子
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