Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: RE: Preventing -estout- from overwriting e(labels) in successive runs


From   Andrew Maurer <[email protected]>
To   "[email protected]" <[email protected]>
Subject   st: RE: Preventing -estout- from overwriting e(labels) in successive runs
Date   Wed, 16 Apr 2014 18:48:08 +0000

Hi Bert,

Just a quick reply, but when you type -`e(labels)'-, the contents of `' is expanded before the rest of the line is executed. Since the estimation set in memory before "estout set1..." is set3, e(labels) contains the labels from set3 rather than set1.

* Problem
******** begin example *************
sysuse auto, clear
eststo set1: estpost tabstat price in 1/15, by(make)
eststo set3: estpost tabstat price in 21/23, by(make)
estout set1, cells(mean) varlabels(`e(labels)')
// If I'm understanding you right, you're wanting Makes 4-15 labelled here
******** end example ***************

One solution would be to just restore set1 to memory before running estout. 

* Solution
******** begin example *************
sysuse auto, clear
eststo set1: estpost tabstat price in 1/15, by(make)
eststo set3: estpost tabstat price in 21/23, by(make)

estimates restore set1

// by restoring set1 to memory, you're putting e(labels) back into the active estimation set

estout set1, cells(mean) varlabels(`e(labels)')
// now each row is labelled correctly
******** end example ***************

Best,

Andrew Maurer

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Bert Jung
Sent: Wednesday, April 16, 2014 1:07 PM
To: [email protected]
Subject: st: Preventing -estout- from overwriting e(labels) in successive runs

Dear Statalisters,

I am hoping to get -estout- (written by Ben Jann, link below) to
assign labels to factor variables.  This has been discussed previously
(links below) but apparently not yet been resolved.

My approach is to place the labels into a local and attach these to
the estimation set as e(labels) using -estadd-.  In the process of
trying this I noticed that sometimes -estout- appears to overwrite
labels stored in e(labels), which can lead to labels being dropped.  I
am hoping that someone might know how to prevent this.

I paste below example code with commentary as well as the associated output.

Thanks for your thoughts,
Bert


** Discussion on labels for factor variables in -estout-, with
solutions summarized by Bert Lloyd

http://www.stata.com/statalist/archive/2012-10/msg00139.html

** Ben Jann's fabulous -estout-

http://repec.org/bocode/e/estout/index.html



*********** Example code **************

which estout

sysuse auto, clear
eststo clear

eststo set1: estpost tabstat price in 1/15, by(make)

* To get the labels, use: varlabels(`e(labels)').  This works nicely.
estout set1, cells(mean)
estout set1, cells(mean) varlabels(`e(labels)')

* Note that e(labels) as assigned to this estimation set contains the
relevant labels.
ereturn list
di `"`e(labels)'"'


* The problem appears when preparing another estimation set.
* This affects the labeling by -estout- IF the levels of the
additional set < original set.

* Example:

* set2 has as many levels/labels => no problem
eststo set2: estpost tabstat price in 21/35, by(make)
estout set1, cells(mean) varlabels(`e(labels)')

* set3 has as FEWER levels/labels => -estout- omits some labels
eststo set3: estpost tabstat price in 21/23, by(make)
estout set1, cells(mean) varlabels(`e(labels)')


* It seems that -estout- overwrites the e(labels) that were attached
to est1.  It now only contains 3 entries.
di `"`e(labels)'"'

********* End of example code ********


*********** Output *************


. which estout
c:\ado\plus\e\estout.ado
*! version 3.13  06aug2009  Ben Jann

.
. sysuse auto, clear
(1978 Automobile Data)

. eststo clear

.
. eststo set1: estpost tabstat price in 1/15, by(make)

Summary statistics: mean
     for variables: price
  by categories of: make

        make |   e(mean)
-------------+-----------
           1 |      4099
           2 |      4749
           3 |      3799
           4 |      4816
           5 |      7827
           6 |      5788
           7 |      4453
           8 |      5189
           9 |     10372
          10 |      4082
          11 |     11385
          12 |     14500
          13 |     15906
          14 |      3299
          15 |      5705
-------------+-----------
       Total |    7064.6

category labels saved in macro e(labels)

.
. * To get the labels, use: varlabels(`e(labels)').  This works nicely.
. estout set1, cells(mean)

-------------------------
                     set1
                     mean
-------------------------
1                    4099
2                    4749
3                    3799
4                    4816
5                    7827
6                    5788
7                    4453
8                    5189
9                   10372
10                   4082
11                  11385
12                  14500
13                  15906
14                   3299
15                   5705
Total              7064.6
-------------------------

. estout set1, cells(mean) varlabels(`e(labels)')

-------------------------
                     set1
                     mean
-------------------------
AMC Concord          4099
AMC Pacer            4749
AMC Spirit           3799
Buick Cent~y         4816
Buick Elec~a         7827
Buick LeSa~e         5788
Buick Opel           4453
Buick Regal          5189
Buick Rivi~a        10372
Buick Skyl~k         4082
Cad. Deville        11385
Cad. Eldor~o        14500
Cad. Seville        15906
Chev. Chev~e         3299
Chev. Impala         5705
Total              7064.6
-------------------------

.
. * Note that e(labels) as assigned to this estimation set contains
the relevant labels.
. ereturn list

scalars:
                  e(N) =  15

macros:
    e(_estimates_name) : "set1"
                e(cmd) : "estpost"
             e(subcmd) : "tabstat"
              e(stats) : "mean"
               e(vars) : "price"
              e(byvar) : "make"
             e(labels) : "1 `"AMC Concord"' 2 `"AMC Pacer"' 3 `"AMC
Spirit"' 4 `"Buick Century"' 5 `"Buick Electra"' 6 `"Buick LeSabre"' 7
`"Buick Opel"' 8 `"Buick.."

matrices:
               e(mean) :  1 x 16

. di `"`e(labels)'"'
1 `"AMC Concord"' 2 `"AMC Pacer"' 3 `"AMC Spirit"' 4 `"Buick Century"'
5 `"Buick Electra"' 6 `"Buick LeSabre"' 7 `"Buick Opel"' 8 `"Buick
Regal"' 9 `"Buick Riviera"' 1
> 0 `"Buick Skylark"' 11 `"Cad. Deville"' 12 `"Cad. Eldorado"' 13 `"Cad. Seville"' 14 `"Chev. Chevette"' 15 `"Chev. Impala"'

.
.
. * The problem appears when preparing another estimation set.
. * This affects the labeling by -estout- IF the levels of the
additional set < original set.
.
. * Example:
.
. * set2 has as many levels/labels => no problem
. eststo set2: estpost tabstat price in 21/35, by(make)

Summary statistics: mean
     for variables: price
  by categories of: make

        make |   e(mean)
-------------+-----------
           1 |      4010
           2 |      5886
           3 |      6342
           4 |      4389
           5 |      4187
           6 |     11497
           7 |     13594
           8 |     13466
           9 |      3829
          10 |      5379
          11 |      6165
          12 |      4516
          13 |      6303
          14 |      3291
          15 |      8814
-------------+-----------
       Total |  6777.867

category labels saved in macro e(labels)

. estout set1, cells(mean) varlabels(`e(labels)')

-------------------------
                     set1
                     mean
-------------------------
Dodge Dipl~t         4099
Dodge Magnum         4749
Dodge.. Re~s         3799
Ford Fiesta          4816
Ford Mustang         7827
Linc. Cont~l         5788
Linc. Mark V         4453
Linc. Vers~s         5189
Merc. Bobcat        10372
Merc. Cougar         4082
Merc. Marq~s        11385
Merc. Mona~h        14500
Merc. XR-7          15906
Merc. Zephyr         3299
Olds 98              5705
Total              7064.6
-------------------------

.
. * set3 has as FEWER levels/labels => -estout- omits some labels
. eststo set3: estpost tabstat price in 21/23, by(make)

Summary statistics: mean
     for variables: price
  by categories of: make

        make |   e(mean)
-------------+-----------
           1 |      4010
           2 |      5886
           3 |      6342
-------------+-----------
       Total |  5412.667

category labels saved in macro e(labels)

. estout set1, cells(mean) varlabels(`e(labels)')

-------------------------
                     set1
                     mean
-------------------------
Dodge Dipl~t         4099
Dodge Magnum         4749
Dodge.. Re~s         3799
4                    4816
5                    7827
6                    5788
7                    4453
8                    5189
9                   10372
10                   4082
11                  11385
12                  14500
13                  15906
14                   3299
15                   5705
Total              7064.6
-------------------------

.
.
. * It seems that -estout- overwrites the e(labels) that were attached
to est1.  It now only contains 3 entries.
. di `"`e(labels)'"'
1 `"Dodge Diplomat"' 2 `"Dodge Magnum"' 3 `"Dodge St. Regis"'




******************************
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/


*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index