在Stata中的外部do-file中使用的宏

时间:2015-12-18 22:36:43

标签: stata

我的问题出现在更一般的设置中,但可以通过此示例进行说明:以下行创建两个新变量,使用两个不同的估算器保存回归量的估计值

sysuse auto, clear 
reg price mpg, r
local m "reg"
gen bmpg_`m' = _b[mpg]
label var bmpg_`m' "`m' estimate"

areg price mpg, absorb(foreign) r
local  m "areg"
gen bmpg_`m' = _b[mpg]
label var bmpg_`m' "`m' estimate"

为了节省空间并避免重复,我创建了一个名为savest.do的外部文件夹,它存储以下重复的两行:

gen bmpg_`m' = _b[mpg]
label var bmpg_`m' "`m' estimate"

所以,我得到一个更短的程序:

sysuse auto, clear 
reg price mpg, r
local m "reg"
do savest

areg price mpg, absorb(foreign) r
local  m "areg"
do savest

然而,这个较短的程序失败了,因为它没有考虑在不同的外部文件中定义的宏m。我使用global代替local但没有成功。

2 个答案:

答案 0 :(得分:3)

解决方案是编写一个以名称作为参数的小程序:

capture program drop savest
program define savest
syntax namelist(min=1 max=1)
    gen bmpg_`namelist' = _b[mpg]
    label var bmpg_`namelist' "`namelist' estimate"
end 

sysuse auto, clear 
reg price mpg, r
savest reg

areg price mpg, absorb(foreign) r
savest areg

答案 1 :(得分:2)

您还可以将参数传递给do-files:

* savest_1.do 
args m 
gen bmpg_`m' = _b[mpg]
label var bmpg_`m' "`m' estimate"

* savest_2.do 
local m `1' 
gen bmpg_`m' = _b[mpg]
label var bmpg_`m' "`m' estimate"

reg price mpg, r
do savest_1 reg