003 Stata局部宏

宏本身分为名称和内容两部分,类似于变量名和值。它可以分为两类:

  • 局部宏 local macros
    只能在给定的do file或一段交互的程序中使用
  • 全局宏 global macros
    在整个程序中都可以使用

这里先介绍局部宏( local macros)

local lclname [=exp | :extended_fcn | "[string]" | `"[string]"']

即局部宏后面可以跟

  • 表达式
  • 扩展函数
  • “字符串”
  • `"字符串"'(字符串中含双引号时用)

局部宏的调用方式:`local_macro_name'

注意:左边的引号是Tab键上方的,右边的引号是Enter键左侧的

*示例1
. local a 3+3

. local b=3+3

. disp `a'
. 6

. disp `b'
. 6

*示例2
. local a 3+3
. local b=3+3
 
. disp "`a'"
. 3+3

. disp "`b'"
. 6

*示例3
. local a "字符串"
. disp `a'

.字符串 not found  //如果赋的值不是数值,则stata查找有无变量的名称为a,若有则输出该变量第一个观测值,反之报错提示找不到a变量。

*示例4
. clear
. set obs 10
. gen mycity = "Hangzhou"
. local a my
. local b city
. disp `a'`b'

. Hangzhou

*示例5

. local a "字符串"
. disp "`a'"

.字符串

*示例6
. local a `""字符"串"'
. disp `"`a'"'

"字符"串

*示例7

. local a 1

. disp `a'
1

. local b `a'+1

. disp `b'
2

*示例8
. local 1 2 

. disp `1'
. 2

. local 2 10  

. disp `2'
. 10

. disp ``1''  
. 10

*示例10
. local x 1 3 5 7 9 100

. disp `x'
. 13579100

. end of do-file //出现“end of do-file”,表明离开子程序,此时再进行disp无内容显示,这体现了local局部变量的特征

. disp "`x'"

. 

*示例11

. local problem = "3+3"

. disp `problem' //等价于 disp 3+3
.6

. disp `"problem"' //等价于 disp "problem"
.problem

. disp `"`problem'"' //等价于 disp `"3+3"'  
.3+3




*示例12

. local problem = 3+3

. disp `problem' //等价于 disp 6
. 6

. disp `"problem"' //等价于 disp "problem"
. problem

. disp `"`problem'"' //等价于 disp `"6"'  
. 6

局部宏的使用场景,如简化控制变量


local controls age agesq education income

reg outcome treatment `controls' //与下式等价
regress outcome treatment age agesq education income

此外,我们可以利用局部宏在程序结束后丢失的特点,建立临时变量、临时文件,一旦do文件结束,这些临时变量和临时文件就会自动被删除。

*临时变量
tempvar tempvarname
`tempvarname'

*临时文件
tempfile tempfilename
`tempfilename'

我们在处理数据时,有时需产生临时文件,最后还需要把临时文件删除,比较麻烦,此时就可以使用tempfile来处理,当程序结束时会自动删除这些文件。

tempfile master_data using_data   

clear
input str12 id str4 year long price
"000001" "2002"  34
"000001" "2003"  71
"000002" "2002"  55
"000002" "2003"  25
"000004" "2002"  86
"000004" "2003"  44
end

save `master_data'

clear
input str13 id  str4 year str12 name
"000001" "2002" "张三"      
"000001" "2003" "张三"      
"000001" "2004" "张三"      
"000001" "2010" "张三"      
"000002" "2002" "王五"  
"000002" "2003" "王五"  
"000002" "2004" "王五"                      
"000004" "2002" "李四"              
"000004" "2003" "李四"              
end

save `using_data'

use `master_data',clear
merge 1:1 id year  using  `using_data'
list

参考资料:
【爬虫俱乐部】精通Stata之数据整理
F026.Stata中产生临时文件命令tempfile的例子

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,947评论 0 5
  • [TOC] ##Assoc 显示或修改文件扩展名关联 Assoc [.Ext[=[Filetype]]] .Ex...
    btijjj阅读 2,962评论 0 1
  • 第一章 前端三大语言:HTML(专门编写网页内容)、CSS(编写网页样式)、JS(专门编写网页交互行为) 能简写尽...
    fastwe阅读 4,724评论 0 0
  • 【码云-Stata 连享会】由中山大学连玉君老师团队创办,点击关注将会定期收到分享的 stata 应用经验和技巧。...
    wangrx阅读 3,853评论 0 1
  • 昨天晚上两个社群活动同时在开,我切换参与的同时,还要边学边记笔记,忙的是不亦乐乎,想想,从小到大所受的教育都是要求...
    Nina张阅读 3,196评论 4 2