*! version 2.9.0 28mar2017 program ms_parse_vce, sclass sreturn clear syntax, [vce(string) weighttype(string)] loc 0 `vce' * need -anything- instead of -namelist- because clusters can be x#y syntax [anything(id="VCE type")] , [*] gettoken vcetype clustervars : anything * Expand variable abbreviations if ("`clustervars'" != "") { ms_fvunab clustervars : `clustervars', stringok loc clustervars : subinstr loc clustervars "i." "", all _assert !strpos("`clustervars'", "."), msg("unexpected dot in clustervars: `clustervars'") unopvarlist `clustervars' loc base_clustervars `r(varlist)' } * vcetype abbreviations: if (substr("`vcetype'",1,3)=="ols") loc vcetype unadjusted if (substr("`vcetype'",1,2)=="un") loc vcetype unadjusted if (substr("`vcetype'",1,1)=="r") loc vcetype robust if (substr("`vcetype'",1,2)=="cl") loc vcetype cluster if ("`vcetype'"=="conventional") loc vcetype unadjusted // Conventional is the name given in e.g. xtreg * Implicit defaults if ("`vcetype'"=="" & "`weighttype'"=="pweight") loc vcetype robust if ("`vcetype'"=="") loc vcetype unadjusted * Sanity checks on vcetype _assert inlist("`vcetype'", "unadjusted", "robust", "cluster"), /// msg("vcetype '`vcetype'' not allowed") _assert !("`vcetype'"=="unadjusted" & "`weighttype'"=="pweight"), /// msg("pweights do not work with vce(unadjusted), use a different vce()") * Recall that [pw] = [aw] + _robust * http://www.stata.com/statalist/archive/2007-04/msg00282.html * Also see: http://www.stata.com/statalist/archive/2004-11/msg00275.html * "aweights are for cell means data, i.e. data which have been collapsed * through averaging, and pweights are for sampling weights" * Cluster vars loc num_clusters : word count `clustervars' _assert inlist( (`num_clusters'>0) + ("`vcetype'"=="cluster") , 0 , 2), msg("Can't specify cluster without clustervars (and viceversa)") // XOR _assert "`options'" == "", msg("VCE options not supported: `options'") * Convert i.turn#i.trunk into turnk#trunk (so we can generate the new variable with the combination of both) sreturn loc vcetype `vcetype' sreturn loc num_clusters `num_clusters' sreturn loc clustervars `clustervars' sreturn loc base_clustervars `base_clustervars' sreturn loc vceextra `options' end