Как программно создать имя макроса и использовать его в качестве макроса? - PullRequest
0 голосов
/ 20 ноября 2018

Я использую команду сообщества gvselect , которая позволяет выполнять выбор переменных лучших подмножеств (статистический метод выбора переменных).

После того, как я его использовал, я получаю следующий результат:

. 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 + )

Как только я программно определил, какой макрос мне нужно использовать (например, число = 1), я застрял.

Я не знаю, как программно создать имя этого макроса, а затем использовать его как обычный макрос. Я даже не уверен, возможно ли это.

Не могли бы вы помочь мне с этим?

Мне удалось скопировать имя макроса в обычную строку следующим образом:

. scalar inum = 7

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

. di macroname
r(best7)

Но как я могу использовать это в моей оценке?

Очевидно, что следующий код не работает:

xtreg  logremglobale  `macroname' i.date, fe

1 Ответ

0 голосов
/ 20 ноября 2018

У меня работает следующее:

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
------------------------------------------------------------------------------
...