我的问题出现在更一般的设置中,但可以通过此示例进行说明:以下行创建两个新变量,使用两个不同的估算器保存回归量的估计值
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
但没有成功。
答案 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