1

我想将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
4

1 回答 1

3

第二个不起作用,因为本地宏最终被调用constant,而不是noconstant,如help syntax##optionally_off. 因此,如果您更换它应该可以工作:

   regress `y' `x', `noconstant'

经过:

   regress `y' `x', `constant'

如果你想传递几个选项,使用*下面解释的语法会更容易help syntax##description_of_options

如果您还指定 *,则将收集并放置任何剩余的选项,一个接一个地放在“选项”中。

例如:

       syntax varlist(min=2 numeric) [if] [in] ///
            [, *]
       ...
       regress `y' `x', `options'
于 2012-02-02T16:25:45.610 回答