具有虚拟变量的Mlogit宏

时间:2012-06-05 13:04:47

标签: regression stata stata-macros

我是Stata和宏的新手。

我试图循环几个变量以从mlogit命令生成估计值,然后将它们保存在数据集中。那部分运作良好。

我遇到的问题是一个分类变量,我需要将其拆分为虚拟变量:

global mypath "/Volumes/NO NAME/Dissertation/Data/AIM 2"
use "$mypath/AIM 2 DATA"
global SES "sesq2 sesq3 sesq4 sesq5"

/*regression*/

foreach xvar in age_median female marital ethnicity literacy $SES poor_health physical_median mental_median facility_fee time_clinic {
    mlogit trauma_main `xvar', b(5) vce(cluster ea_id) rrr
    parmest, saving("$mypath/multi_`xvar'.dta", replace)
}

我认为通过将SES设置为全局变量,循环会将其视为一组变量,但我错了。代码循环遍历$SES中的每个变量,所以我最终将每个虚拟变量分别回归到trauma_main,这不是我想要的。

有没有办法“告诉”Stata将虚拟变量视为一个块?另外,我知道我可以做i.SES并且使用它确实可以正常工作,但是使用的引用组不是我想要的那个。我已经用Google搜索了如何为i.var之类的内容设置参考组,但我没有提出任何有用的信息,可能是因为我使用了错误的搜索字词。

提前感谢您的任何建议。

玛吉

2 个答案:

答案 0 :(得分:1)

您无需将分类变量拆分为虚拟变量。您可以使用因子变量表示法(i.)代替。这在help fvvarlist中有记录。使用因子变量,参考类别的变化很简单。

这是一个例子。 site 变量有三个类别。默认情况下, site = 1 是分类变量的参考类别:

  

webuse sysdsn1,clear

     

foreach v in age male i.site {
      mlogit确保`v'
  }

使用ib,您可以将参考类别设置为任何所需级别。如果您希望 site = 2 作为参考,则可以执行以下操作:

  

foreach v in age male ib2.site {
      mlogit确保`v'
  }

答案 1 :(得分:0)

Stata's documentation for the foreach command表示如果没有全局宏,它将起作用,即

. foreach xvar in age_median female marital ethnicity literacy "sesq2 sesq3 sesq4 sesq5" poor_health physical_median mental_median facility_fee time_clinic {

如果您想使用全局宏执行此操作,则需要使用复合双引号来定义包含引号的宏:

. global SES `""sesq2 sesq3 sesq4 sesq5""'