Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


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

Re: st: how to keep labels when using foreach


From   Maarten Buis <maartenlbuis@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: how to keep labels when using foreach
Date   Wed, 13 Mar 2013 13:26:59 +0100

On Wed, Mar 13, 2013 at 12:38 PM, anne broe wrote:
> Im using -foreach- but seem to loose all my value labels when doing so.
> How can I keep the labels in the output from -foreach-?
>
> this is my do file
>
> foreach xx in m_agegr==0 m_agegr==15 m_agegr==20 m_agegr==25
> m_agegr==30 m_agegr==35 m_agegr==40 m_agegr==45 smoking_status==0
> smoking_status==1 smoking_status==2 smoking_status==3    {
>         use Work\Temp4, clear
>         display "`xx'"
>         keep if `xx'
>         gen atc_yes = 1 if ga_atc==1
>         gen atc_no = 1 if ga_atc==0
>         collapse (sum) atc_yes atc_no
>         gen str30 group="`xx'"
>         if "`xx'" != "m_agegr==0" append using Work\Q4
>     save Work\Q4, replace
>     }

The problem does not seem to be -foreach- but -collapse-. The dataset
is just a count of observations with ga_atc equals 1 and ga_atc equals
0. The datasets returned by collapse are so fundamentally different
that it makes sense that value labels are removed except for variables
specified in the -by()- option.

Anyhow, even though -foreach- is not the problem, I would still not
use it in this case. Instead I would reduce that code to two calls to
-collapse- in combination witht he -by()- option:

*------------------ begin example ------------------
clear all
sysuse auto
sum price, detail
gen byte expensive = ( price > r(p75) ) if price < .
gen byte cheap = 1 - expensive

 label define rep78 1 "Poor"      ///
                    2 "Fair"      ///
                    3 "Average"   ///
                    4 "Good"      ///
                    5 "Excellent"
label value rep78 rep78

collapse (sum) expensive cheap, by(rep78)

tempfile temp
save `temp'

sysuse auto
sum price, detail
gen byte expensive = ( price > r(p75) ) if price < .
gen byte cheap = 1 - expensive

collapse (sum) expensive cheap, by(foreign)
append using `temp'

list
*------------------- end example -------------------
* (For more on examples I sent to the Statalist see:
* http://www.maartenbuis.nl/example_faq )

Hope this helps,
Maarten

---------------------------------
Maarten L. Buis
WZB
Reichpietschufer 50
10785 Berlin
Germany

http://www.maartenbuis.nl
---------------------------------
*
*   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–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index