local与global

引子

local的使用是一次性的。
比如,

clear
set obs 100
gen oldvar=1

local a "myvar"
generate `a' = oldvar

generate a = oldvar

一共六行命令,和local相关的是第四行和第五行,这两行一定要一起选中一起运行,不可以单独运行,否则会报错
这里,四五行分开运行时,第五行运行后,报错“too few variables specified

local与global

如果用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

上一篇:CSS选择器(6)——伪元素


下一篇:LeetCode 17. 电话号码的字母组合