如何在编写新的估算命令时从因子运算符中获取因子值名称?

时间:2017-09-19 20:13:00

标签: stata

Stata有一些内置的运算符,可以在估算命令的上下文中使用因子变量和交互。例如,假设有两个因子变量名为sex(男/女),arm(处理/控制)以下命令:

. regress outcome sex##arm

在输出中产生指标变量的估计值:

------------------------------------------------------------------------------
     ln_wage |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
         sex | 
     female  | ...
             | 
         arm |  
    control  | ...
             |
     sex#arm |
femal#contr  | ...
             |
       _cons | ...
------------------------------------------------------------------------------

##运算符也适用于sex##arm##group之类的三向互动。此外,ib或同义b运算符提供了一种指定每个因子变量的哪个基值将作为参照类别的方法。

如果我正在编写新的估算命令MyReg,是否有一些语法或解析工具允许像MyReg outcome sex##arm这样的调用来访问这些因子名称/因子值名称(左侧出现)上表中的列),而不必为非常重要的Stata因子变量运算符编写我自己的解析器?

1 个答案:

答案 0 :(得分:2)

我不完全确定我是否完全理解你的想法,但这里有一个让你走这条路的例子:

/* (1) Define MyReg */
capture program drop MyReg

program define MyReg, eclass
    version 14.2
    syntax varlist(min=1 fv)

    /* do the regression */ 
    regress `varlist'

    /* pull out the column names from the coefficient matrix */ 
    local fvnames : colfullnames e(b)

    /* drop omitted categories from column names list */ 
    foreach var of local fvnames {
            _ms_parse_parts `var'
            if !`r(omit)' {
                local fvlist `fvlist' `var'
            }   
        }

    /* e-return the names */    
    ereturn local fvlist `fvlist'

end;

/* (2) An Example */
sysuse auto
MyReg price i.foreign##c.weight
display "Left Column Contents: " e(fvlist)

还有一个关于程序员here的有用因子变量命令的精彩常见问题解答。