STATA中的Macro(宏、暂元)、通配符与循环——减少重复性的工作

本文介绍了STATA中宏(Macro)的概念,包括局部宏和全局宏的定义与调用,展示了如何通过宏简化重复输入。此外,还讲解了循环和通配符的使用,结合案例说明了它们在批量处理和数据操作中的强大功能。通过宏、循环和通配符的联合使用,可以高效地处理大量数据,例如统计不同年份诊疗行为的频次分布。
摘要由CSDN通过智能技术生成

1. Macro(宏、暂元)

1.1 Macro的介绍

在STATA教程中,Macro也被翻译为宏、暂元等。Macro是程序中的临时变量,由Macro的名称和内容两部分组成,类似于变量名和变量值。Macro有局部宏和全局宏两种。局部宏只存在于定义它的程序之内,并且不能在其他程序中被引用;而全局宏一旦被定义,就会保留在当前Stata内存中,可以被当前STATA会话期间的其他程序所使用。

宏的方便之处之一在于,你可以在宏里面加入多个内容。尤其是你需要多次输入同一内容时,定义和调用宏是最简单的方法。比如你要做多个回归进行比较,需要reg Y X1 X2 X3 X4 Xa, reg X1 X2 X3 X4 Xb , reg X1 X2 X3 X4 Xc。你可以定义X1 X2 X3 X4为一个宏,定义宏以后,你回归的时候就可以不用多次输入。

也许你看完下面的例子并不觉得它的方便,但当你要批量计算或是与循环、通配符连用的时候,你会知道它的威力

1.2 宏的定义与调用

1.2.1 局部宏

* 1.局部宏的格式: local 宏名称  "宏内容"   
local Xcontrol " X1 X2 X3 X4"  / 把X1 X2 X3 X4定义为宏变量,取名为Xcontrol。
* 2. 局部宏的调用
* 调用的时候,直接输入命令  `宏名' 即可   / 注意,` 符号不是单引号' ,而是键盘上~键下面的 ` 符号。
***例子1
local Xcontrol  " X1 X2 X3 X4"
reg Y `Xcontrol' Xa 
等价于
reg Y X1 X2 X3 X4 Xa
** 例子2
sum X1 X2 X3 X4
等价于
local Xcontrol  "X1 X2 X3 X4"
sum `Xcontrol'

1.2.2 全局宏

* 1.全局宏与局部宏类似,只是其作用范围为当前Stata的整个程序。
* 其格式为: global 宏名称  "宏内容"   
global Xcontrol " X1 X2 X3 X4"  / 把X1 X2 X3 X4定义为全局宏变量,取名为Xcontrol。
* 2. 全局宏的调用
* 调用的时候,直接输入命令  $宏名 即可   / 全局宏前面加 $ 符号
***例子(与局部宏一样,只不过全局宏的定义用global,调用则用$符号)
global Xcontrol  " X1 X2 X3 X4"
reg Y $Xcontrol  Xa 
等价于
reg Y X1 X2 X3 X4 Xa
** 例子2
sum X1 X2 X3 X4
等价于
global Xcontrol  "X1 X2 X3 X4"
sum $Xcontrol

2. 循环

循环是减少重复性工作的好帮收,详情请学习以下博文

foreach语句
连享会视频

3. 通配符

熟悉word查找替换的朋友都知道通配符,stata也有。常用的有? *

如你有如下变量,age agm education grade BMI weight2017 weight2018  height2017 height2018
3.1 - 符号表示从** 到 ** 

sum age- BMI 
等价于
sum age agm education grade BMI 

** 3.2  ? 为一个字符通配符
sum ag?
等价于
sum age agm

sum weight201?
等价于
sum  weight2017 weight2018

** 3.3 *为多字符通配符

sum *20*
等价于
sum weight2017 weight2018  height2017 height2018

sum weight*
等价于
sum weight2017 weight2018

4.Macro、循环与通配符的联合使用

曾做个一些数据处理
有2010-2020年某国所有医疗机构开展A种诊疗的数据,其值在50-500之间,其变量名为all2010,all2011,……all2020,需统计每年诊疗次次在50-100,100-200,200-500次的机构数和该频次段内开展的A种诊疗行为的总次数。其其代码一览如下。

* 分别统计2010、2011、2012……2020统计频次在50-100次间的诊疗机构总数与诊疗行为总数(三行代码解决几十行的重复代码)
local vars " all201* "  
foreach v of varlist `vars' {
sum `v' if `v' >=50 & `v' < 100
}

*分别统计2010、2011、2012……2020统计频次在100-200次间的诊疗机构总数与诊疗行为总数
local vars " all201* "
foreach v of varlist `vars' {
sum `v' if `v' >=100 & `v' < 200
}

*分别统计2010、2011、2012……2020统计频次在200-500次间的诊疗机构总数与诊疗行为总数
local vars " all201* "
foreach v of varlist `vars' {
sum `v' if `v' >=200 & `v' < 500
}

推荐资料
stata的循环

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值