如何以编程方式创建宏的名称并将其用作宏?
How to create the name of a macro programmatically and use it as a macro?
我正在使用社区贡献的命令gvselect,它允许执行最佳子集变量selection(一种统计方法select 变量)。
我使用后得到如下结果:
. return list
macros:
r(best3) : " q105capitalisationboursireouvalo q12nombredefemmesauconseil q405existenceduncomitdesrmunrati"
r(best2) : " q12nombredefemmesauconseil q405existenceduncomitdesrmunrati"
r(best1) : " q405existenceduncomitdesrmunrati"
然后我需要在另一种统计估计方法中使用这些宏之一。
比如我可以使用第一个如下:
xtreg logremglobale `r(best3)' i.date, fe
(注意宏`r(best3)'
用作参数)
我的框架需要我事先不知道我需要使用哪个宏,所以我以编程方式确定它。
在这个简化的示例中,我可能必须根据数据使用 r(best1)
、 r(best2)
或 r(best3)
(实际上有更多可用的宏)。
gvselect 生成的所有宏都具有相同的语法:r(best
+ number
+ )
一旦我以编程方式确定了我必须使用哪个宏(例如:number = 1),我就卡住了。
我不知道如何以编程方式创建此宏的名称,然后将其用作普通宏。我什至不确定这是否可能。
你能帮我解决这个问题吗?
我已经成功地在普通字符串中复制了宏名称,如下所示:
. scalar inum = 7
. gen macroname = "r(best" + string(inum,"%8.0g")+")"
. di macroname
r(best7)
但是如何在我的估算中使用它呢?
显然以下代码不起作用:
xtreg logremglobale `macroname' i.date, fe
以下对我有用:
sysuse auto, clear
gvselect <term> weight trunk length, nmodels(2): regress mpg <term> i.foreign
return list
scalars:
r(nmodels) = 2
r(k) = 3
macros:
r(best31) : " weight trunk length"
r(best22) : " weight trunk"
r(best21) : " weight length"
r(best12) : " length"
r(best11) : " weight"
matrices:
r(info) : 5 x 4
scalar inum = 31
local macroname r(best`= inum')
regress price ``macroname''
Source | SS df MS Number of obs = 74
-------------+---------------------------------- F(3, 70) = 12.47
Model | 221230614 3 73743538 Prob > F = 0.0000
Residual | 413834782 70 5911925.46 R-squared = 0.3484
-------------+---------------------------------- Adj R-squared = 0.3204
Total | 635065396 73 8699525.97 Root MSE = 2431.4
------------------------------------------------------------------------------
price | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
weight | 4.721599 1.132265 4.17 0.000 2.463369 6.979829
trunk | 28.37644 97.05843 0.29 0.771 -165.2005 221.9534
length | -102.6652 42.58687 -2.41 0.019 -187.602 -17.72834
_cons | 10812.33 4574.211 2.36 0.021 1689.353 19935.3
------------------------------------------------------------------------------
我正在使用社区贡献的命令gvselect,它允许执行最佳子集变量selection(一种统计方法select 变量)。
我使用后得到如下结果:
. return list
macros:
r(best3) : " q105capitalisationboursireouvalo q12nombredefemmesauconseil q405existenceduncomitdesrmunrati"
r(best2) : " q12nombredefemmesauconseil q405existenceduncomitdesrmunrati"
r(best1) : " q405existenceduncomitdesrmunrati"
然后我需要在另一种统计估计方法中使用这些宏之一。
比如我可以使用第一个如下:
xtreg logremglobale `r(best3)' i.date, fe
(注意宏`r(best3)'
用作参数)
我的框架需要我事先不知道我需要使用哪个宏,所以我以编程方式确定它。
在这个简化的示例中,我可能必须根据数据使用 r(best1)
、 r(best2)
或 r(best3)
(实际上有更多可用的宏)。
gvselect 生成的所有宏都具有相同的语法:r(best
+ number
+ )
一旦我以编程方式确定了我必须使用哪个宏(例如:number = 1),我就卡住了。
我不知道如何以编程方式创建此宏的名称,然后将其用作普通宏。我什至不确定这是否可能。
你能帮我解决这个问题吗?
我已经成功地在普通字符串中复制了宏名称,如下所示:
. scalar inum = 7
. gen macroname = "r(best" + string(inum,"%8.0g")+")"
. di macroname
r(best7)
但是如何在我的估算中使用它呢?
显然以下代码不起作用:
xtreg logremglobale `macroname' i.date, fe
以下对我有用:
sysuse auto, clear
gvselect <term> weight trunk length, nmodels(2): regress mpg <term> i.foreign
return list
scalars:
r(nmodels) = 2
r(k) = 3
macros:
r(best31) : " weight trunk length"
r(best22) : " weight trunk"
r(best21) : " weight length"
r(best12) : " length"
r(best11) : " weight"
matrices:
r(info) : 5 x 4
scalar inum = 31
local macroname r(best`= inum')
regress price ``macroname''
Source | SS df MS Number of obs = 74
-------------+---------------------------------- F(3, 70) = 12.47
Model | 221230614 3 73743538 Prob > F = 0.0000
Residual | 413834782 70 5911925.46 R-squared = 0.3484
-------------+---------------------------------- Adj R-squared = 0.3204
Total | 635065396 73 8699525.97 Root MSE = 2431.4
------------------------------------------------------------------------------
price | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
weight | 4.721599 1.132265 4.17 0.000 2.463369 6.979829
trunk | 28.37644 97.05843 0.29 0.771 -165.2005 221.9534
length | -102.6652 42.58687 -2.41 0.019 -187.602 -17.72834
_cons | 10812.33 4574.211 2.36 0.021 1689.353 19935.3
------------------------------------------------------------------------------