st: Ado-files commands and saving results in e()

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

st: Ado-files commands and saving results in e()

Paulo Regis
Dear all,

First of all, I would like to say that, previous to posting on this
list, I have checked internet (not much out there, though), help files
of -ereturn and -estimates. I also use "get trace on" to study what
some stata commands do to display results. Section 18.10 (Saving
Revults) in the User's Guide was the most useful material available. I
manage my way but my general feeling is that I hope it would have been
easier. Any other material you think may be useful would be welcomed.

Back to business, I would like to have some comments from people of
this list with more knowledge of Stata and statistics than me: what
kind of results you should make available after you use a user written
command. Since it is very likely your answer would be that it depends,
let me present you with my particular case. I am working with some
three-step procedure that requires to make some transformation of the
original variable. I developed an ado-file command and I am struggling
to present the coefficient table and make available results in e().
Lets say you create an ado file such as

             program define mycommand, eclass
             version 9
             syntax  varlist , i(panel)
             tokenize `varlist'
             local yvar="`1'"
             macro shift
             local xvarlist="`*'"
             *Step 3
             xtreg `yvar_hat' `xvarlist_hat', i(`panel') fe
             ereturn local cmd mycommand

You have three local that group the information the user must provide:
the dependent variable (yvar), independent variable list (xvarlist)
and panel id variable (panel). I do a three step procedure (which is
basically a GLS estimator) where the "_hat" locals contain the
transformation of the original data.

You have different results in e(): scalars, macros, matrices,
functions. My programme makes available the results saved in e() by
-xtreg and only changes


which is the name of the estimation command ("mycommand" in this
case). I think it is reasonable to keep the scalars and matrices from
e() but I am particularly concerned about one of the macro ereturn,
which is

             e(predict) : "xtrefe_p"

Here, -xtrefe_p was created for -xtreg. It is unlikely it would be
useful for my command. I use transformation of the original variables
with xtreg and these auxiliary varaibles are not available any more.
Other  macro ereturn look fine to me.

If the best option is to eliminate e(predict), the problem is how to
do this which should be straightforward. The only way around I found
was to use "ereturn post". The code becomes

             program define mycommand, eclass
             *Step 3
             xtreg `yvar_hat' `xvarlist_hat', i(`panel') fe
             tempvar b vb esample
             mat `b'=e(b)
             mat `vb'=e(V)
             mat colnames `b' = `xvar' _cons
             mat colnames `vb' = `xvar' _cons
             mat rownames `vb' = `xvar' _cons
             gen byte `esample' = e(sample)
             local r2b e(r2_b)
             ereturn post `b' `vb', depname(`yvar') esample(`esample')
             ereturn local r2_b r2b
             ereturn local cmd mycommand

I can introduce additional scalar ereturn from xtreg such as e(r2_b)
quite easily. My question is whether there is an easier way to get rid
of  "e(predict)" than using "ereturn" which erase all other

Thank you for your time

*   For searches and help try: