Stata 中外部 do 文件中使用的宏
Macro used in an external do-file in 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"
为了保存 space 并避免重复,我创建了一个名为 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
但是,这个较短的程序失败了,因为它没有考虑在不同的外部 do 文件中定义的宏 m
。我使用 global
而不是 local
但没有成功。
解决方案是编写一个将名称作为参数的小程序:
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
您还可以将参数传递给 do 文件:
* 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
我的问题出现在更一般的设置中,但可以用这个例子来说明:下面几行创建了两个新变量,使用两个不同的估计器保存回归量的估计
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"
为了保存 space 并避免重复,我创建了一个名为 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
但是,这个较短的程序失败了,因为它没有考虑在不同的外部 do 文件中定义的宏 m
。我使用 global
而不是 local
但没有成功。
解决方案是编写一个将名称作为参数的小程序:
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
您还可以将参数传递给 do 文件:
* 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