Как передать `noconstant` или другие параметры из программы-оболочки во внутренний вызов` regress` - PullRequest
1 голос
/ 02 февраля 2012

Я бы хотел передать параметр noconstant из программы-оболочки во внутренний вызов regress.Следующее решение работает, но оно кажется особенно дрянным и не расширяемым, если я хочу передать несколько опций.

webuse grunfeld, clear

capture program drop regress_wrapper
program define regress_wrapper
    version 11.2
    syntax varlist(min=2 numeric) [if] [in] ///
        [, noconstant(string)]
    tokenize `varlist'
    local y `1'
    macro shift
    local x `*'
    regress `y' `x', `noconstant'
end    

regress_wrapper invest mvalue kstock
regress_wrapper invest mvalue kstock, noconstant(noconstant)

Я думал, что будет работать что-то более похожее на следующее, но оно не проходит noconstant опция.

capture program drop regress_wrapper
program define regress_wrapper
    version 11.2
    syntax varlist(min=2 numeric) [if] [in] ///
        [, noconstant]
    tokenize `varlist'
    local y `1'
    macro shift
    local x `*'
    regress `y' `x', `noconstant'
end    

regress_wrapper invest mvalue kstock
regress_wrapper invest mvalue kstock, noconstant

1 Ответ

3 голосов
/ 02 февраля 2012

Второй не работает, потому что локальный макрос в итоге вызывается constant, а не noconstant, как описано в help syntax##optionally_off.Так что это должно работать, если вы замените:

   regress `y' `x', `noconstant'

на:

   regress `y' `x', `constant'

Если вы хотите передать несколько опций, проще использовать синтаксис *, объясненный на help syntax##description_of_options:

Если вы также укажете *, все оставшиеся опции собираются и помещаются один за другим в `options '.

например:

       syntax varlist(min=2 numeric) [if] [in] ///
            [, *]
       ...
       regress `y' `x', `options'
...