*! ivreg2hdfe v1.0.0 | Dany Bahar | dbaharc@gmail.com | 15May2014 cap prog drop ivreg2hdfe program ivreg2hdfe, eclass // program reg2hdfe, eclass version 10.1 syntax [if], DEpvar(varname num) ENdog(varlist num) iv(varlist num) [EXog(varlist num)] id1(varname max=1) id2(varname max=1) [cluster(varname max=1)] [gmm2s] marksample touse tmpdir returns r(tmpdir): local tdir `r(tmpdir)' qui cd "`tdir'" local tempfiles : dir . files "*.dta" foreach f in `tempfiles' { erase `f' } preserve if "`if'"~="" { qui keep `if' } bys `id1':gen NN=_N qui drop if NN==1 drop NN tempvar clustervar ctrans if "`cluster'"~="" { capture confirm string variable `cluster' if !_rc { gen `ctrans' = `cluster' capture encode `ctrans', g(`clustervar') } else { gen double `clustervar'=`cluster' } qui reg2hdfe `depvar' `endog' `exog' `iv', id1(`id1') id2(`id2') cluster(`clustervar') out("`tdir'") noregress } else { qui reg2hdfe `depvar' `endog' `exog' `iv', id1(`id1') id2(`id2') out("`tdir'") noregress } /* From reg2hdfe.ado */ tempfile tmp1 tmp2 tmp3 readdata quietly { use _ids, clear sort __uid qui save "`tmp1'", replace if "`cluster'"!="" { merge __uid using _clustervar if r(min)