Stata小白编程:暂元及macrolists命令

发布时间:2021-04-11 阅读 5487

Stata连享会   主页 || 视频 || 推文 || 知乎

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装命令如下:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

作者:宋津泽、徐琬萱 (中山大学)
邮箱songjz3@mail2.sysu.edu.cn


目录


1. 暂元介绍

1.1 暂元定义及其分类

暂元 (Macro) 是以一个简单的单词来指代一串复杂的字符或表达式。并且根据有效使用范围,暂元又可分为局部暂元 (local macro) 和全局暂元 (global macro)。其中,局部暂元仅在定义它的 do 文件中有效,更精确的来说,局部暂元仅在同时运行的代码范围内有效。相对而言,全局暂元的有效范围更广,即在 do 文件关闭后仍然存在,直至退出 Stata。

1.2 暂元的基本功能

存放数字,即将数值赋给此暂元。

. local a 5
. local b = `a' + 7
. dis `a'
5
. dis `b'
12

存放文字,包括变量名称和长字符。

. sysuse auto, clear
(1978 Automobile Data)
. local v1 "price"
. local v2 "weight rep78 length"
. reg `v1' `v2'

      Source |       SS           df       MS      Number of obs   =        69
-------------+----------------------------------   F(3, 65)        =     16.16
       Model |   246375736         3  82125245.5   Prob > F        =    0.0000
    Residual |   330421222        65  5083403.42   R-squared       =    0.4271
-------------+----------------------------------   Adj R-squared   =    0.4007
       Total |   576796959        68  8482308.22   Root MSE        =    2254.6

------------------------------------------------------------------------------
       price |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      weight |   5.252098   1.103427     4.76   0.000     3.048401    7.455794
       rep78 |   844.9462   302.0363     2.80   0.007      241.738    1448.154
      length |  -103.6016   37.78457    -2.74   0.008    -179.0626   -28.14063
       _cons |   6850.952   4312.738     1.59   0.117    -1762.181    15464.08
------------------------------------------------------------------------------

暂元可进行嵌套,即暂元中的暂元。

. local a1 = 2
. local a2 "var"
. local a3 = 2 * `a1'
. local a4 `a`a1''
. local `a2'`a1' = 2 * `a3'

. dis `a1'
2
. dis "`a2'"
var
. dis `a3'
4
. dis "`a4'"
var
. dis ``a2'`a1''
8

注:调用 numeric 类暂元时,两侧分别加 Tab 键上方反引号 ` 和 Enter 键左边单引号 '。调用 string 类暂元时,需要在 ` ' 的基础上两侧加双引号 "` '"

1.3 暂元的应用场景

若回归变量较为复杂且数量太多,或是需要将不同的回归方式进行分组罗列时,将变量名称直接写入 do 文档会显得繁琐冗杂,此时将变量赋给暂元,就可以使文档较为简洁美观。

. local x var1 var2 var3
. reg y `x'

在循环中使用暂元会非常方便。

. local variables var1 var2 var3
. foreach var of varlist `variables'{}

2. macro lists 介绍

除上述基本功能外,Stata 还为暂元提供了许多额外的功能。

2.1 语法介绍

{local|global} macname : list {uniq|dups...} macname

  • 其中,macname 指暂元的名称。需要注意的是,在输入 local result : list list1 | list2 时,我们不需要在 list1list2 的两侧加入暂元引用符;
  • 暂元中包含空格的元素需要用 " " 将其括起来。例如,暂元 A 中有四个元素 first elementsecondthird element4,此时要写成 "first element" second "third element" 4
  • Stata 会将暂元中所有的重复项视为不同项。 例如,暂元 A = "a b c b",暂元 B = "b b",那么A | B = "a b c b",如果暂元 B = "b b b",那么 A | B = "a b c b b"

更多详细介绍,请参考 help macro lists

2.2 对单个暂元的操作命令

uniq A:将暂元 A 中重复值删除

. local A1 a a b c a
. local result1 : list uniq A1
. di "`result1'"
a b c

dups A:仅保留 A 中重复值

. local A2 a a b c a
. local result2 : list dups A2
. di "`result2'"
a a

sort A:将 A 中元素按字母表或字符值排序

. local A3 a a b c a
. local result3 : list sort A3
. di "`result3'"
a a a b c

retokenize A:将 A 中元素间多余空格删除

. local A4 "a       a b c a"
. local result4 : list retokenize A4
. di "`result4'"
a a b c a

sizeof A:A 中元素的个数

. local A5 "a b c a"
. local result5 : list sizeof A5
. di "`result5'"
4

posof "element" in A:返回某个元素在 A 的第几个位置,若该元素在 A 中不存在,则返回 0

. local A6 "a b c a"
. local result6 : list posof "c" in A6
. di "`result6'"
3
. local result7 : list posof "e" in A6
. di "`result7'"
0

2.3 对多个暂元的操作命令

A | B:返回 A 和 B 的并集

. local A1 a b c
. local B1 b d c
. local new1 : list A1 | B1
. di "`new1'"
a b c d

A & B:返回 A 和 B 的交集

. local A2 a b c d
. local B2 b d e f
. local new2 : list A2 & B2
. di "`new2'"
b d

A - B:将 A 中 B 的元素剔除

. local A3 a b c d
. local B3 b a d e f
. local new3 : list A3 - B3
. di "`new3'"
c

A == B:判断 A 和 B 的元素及其顺序是否相同,若相同则返回 1,否则返回 0

. local A4 a b c d
. local B4 a b c d
. local C4 a c b d
. local new4 : list A4 == B4
. local new5 : list A4 == C4
. di "`new4'"
1
. di "`new5'"
0

A === B:判断 A 和 B 的元素是否相同 (不考虑顺序),若相同则返回 1,否则返回 0

. local A4 a b c d
. local B4 a c b d
. local new4 : list A4 === B4
. di "`new4'"
1

A in B:判断 A 是否是 B 的子集,若是则返回 1,否则返回 0

. local A5 a b c d
. local B5 a b c d e
. local C5
. local new5 : list A5 in B5
. local new6 : list C5 in B5
. di "`new5'"
1
. di "`new6'"
1

3. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 暂元 课程主页, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh