Stata 如何以编程方式创建宏的名称并将其用作宏?

Stata 如何以编程方式创建宏的名称并将其用作宏?,stata,stata-macros,Stata,Stata Macros,我正在使用社区贡献的命令,该命令允许执行最佳子集变量选择(选择变量的统计方法) 使用后,我得到以下结果: . return list macros: r(best3) : " q105capitalisationboursireouvalo q12nombredefemmesauconseil q405existenceduncomitdesrmunrati" r(best2) : " q12nombredefemmesauconseil

我正在使用社区贡献的命令,该命令允许执行最佳子集变量选择(选择变量的统计方法)

使用后,我得到以下结果:

. return list

macros:
              r(best3) : " q105capitalisationboursireouvalo q12nombredefemmesauconseil q405existenceduncomitdesrmunrati"
              r(best2) : " q12nombredefemmesauconseil q405existenceduncomitdesrmunrati"
              r(best1) : " q405existenceduncomitdesrmunrati"
然后我需要在另一个统计估计方法中使用这些宏中的一个

例如,我可以使用第一个,如下所示:

 xtreg  logremglobale  `r(best3)' i.date, fe
. scalar inum = 7

. gen macroname =  "r(best" + string(inum,"%8.0g")+")"

. di macroname
r(best7)
(注意宏
`r(best3)
用作参数)

我的框架要求我事先不知道需要使用哪个宏,所以我通过编程来确定它

在这个简化的示例中,我可能必须根据数据使用
r(best1)
r(best2)
r(best3)
(实际上有更多的宏可用)

由生成的所有宏都具有相同的语法:
r(最佳
+
number
+

一旦我以编程方式确定了我必须使用的宏(例如:number=1),我就卡住了

我不知道如何以编程方式创建此宏的名称,然后将其用作普通宏。我甚至不确定这是否可能

你能帮我做这个吗

我已成功将宏名称复制为普通字符串,如下所示:

 xtreg  logremglobale  `r(best3)' i.date, fe
. 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
------------------------------------------------------------------------------
sysuse自动,清除
gvselect重量躯干长度,nmodels(2):回归mpg i
返回列表
标量:
r(nmodels)=2
r(k)=3
宏:
r(最佳31):“重量躯干长度”
r(最佳22):“重量行李箱”
r(最佳21):“重量长度”
r(最佳12):“长度”
r(最佳11):“重量”
矩阵:
r(信息):5 x 4
标量inum=31
本地宏名r(最佳“=inum”)
回归价格“宏名称”
源| SS df MS obs数量=74
-------------+----------------------------------F(3,70)=12.47
型号| 221230614 3 73743538 Prob>F=0.0000
残差| 413834782 70 5911925.46 R平方=0.3484
-------------+----------------------------------调整R平方=0.3204
总计| 635065396 73 8699525.97根MSE=2431.4
------------------------------------------------------------------------------
价格系数。标准错误。t P>| t |[95%配置间隔]
-------------+----------------------------------------------------------------
重量| 4.721599 1.132265 4.17 0.000 2.463369 6.979829
主干| 28.37644 97.05843 0.29 0.771-165.2005 221.9534
长度|-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
------------------------------------------------------------------------------

太好了,谢谢您的详细回答。我不知道可以为宏创建双存储模块。