[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

From |
"Nick Cox" <n.j.cox@durham.ac.uk> |

To |
<statalist@hsphsun2.harvard.edu> |

Subject |
st: RE: Re: return list and by |

Date |
Tue, 13 Apr 2004 10:43:35 +0100 |

To expand on a few points: 1. The -egen- route is naturally fine whenever it offers the statistic you want to keep. Note that when you go by person : egen mean = mean(whatever) That mean will be repeated for every observation for each person. For many purposes you will want to use each mean just once. Tagging is one way to do that egen tag = tag(person) tags just one observation for each person. Then you can follow up with ... if tag If you look inside the -mean()- function you will see that it does not use -summarize-. 2. -statsby- is what I call a reduction command. You will get one observation for each person, in your problem, i.e. you will lose the existing dataset. Roger Newson's set of commands is another example of a reduction approach. 3. Doing it yourself with a loop is not too difficult, but you must loop over groups at a minimum. One FAQ which may be of help is http://www.stata.com/support/faqs/data/foreach.html Persons will have integer or string identifiers, so using -levels- is often effective. Taking your program > program mean_get > syntax [varlist] > foreach i of local varlist { > generate overall2 = 0 > by name, sort: summarize `i', meanonly > local 1 = r(mean) > by name, sort: replace overall2 = `1' > } > end let's forget that -egen- exists and write a program that puts means of a varlist into variables -mean_*- for a division by some required variable. program mean_get * NJC after Clint Thompson 13 April 2004 version 8 syntax varlist(numeric), by(varname) // check new names will be OK foreach v of local varlist { confirm new var mean_`v' } // this will fail if `by' is not categorical qui levels `by', local(B) capture confirm numeric var `by' local isstr = _rc != 0 qui foreach v of local varlist { gen mean_`v' = . if `isstr' { foreach b of local B { su `v' if `by' == `"`b'"', meanonly replace mean_`v' = r(mean) if `by' == `"`b'"' } } else { foreach b of local B { su `v' if `by' == `b', meanonly replace mean_`v' = r(mean) if `by' == `b' } } } end I added a bit more checking. There is still much that could be added e.g. support for -if- and -in-. Nick n.j.cox@durham.ac.uk Michael Blasnik > most directly: > > by name: egen overall2=mean(`i') > > will put the mean of var `i', calculated for each value of name, in > overall2. Of course, this value will still be overwritten by > the next var > in the varlist if your loop is left as shown. > > More specifically, when you use constructs such as -by x: > summ y- , you > can't get at the individual results -- it's quite frustrating > when you first > discover this. Instead you either have to write your own loop across > groups, or else you may be able to use an -egen- function or > -statsby- (or > perhaps -parmby-). cthompson@dfpm.utah.edu > > Is there a way to save the mean in r() for each value of a > > variable? More specifically, I want the mean for each > > different person contained within the variable 'name'. My > > programming experience in Stata is quite limited so I'd > > appreciate any advice; the shrapnel from my attempt at coding > > is pasted below: > > > > program mean_get > > syntax [varlist] > > foreach i of local varlist { > > generate overall2 = 0 > > by name, sort: summarize `i', meanonly > > local 1 = r(mean) > > by name, sort: replace overall2 = `1' > > } > > end > > > > When I run this, it returns the mean from the last value in > > 'name' and uses it to replace all values of 'overall2'. Any > > suggestions? * * For searches and help try: * http://www.stata.com/support/faqs/res/findit.html * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**Follow-Ups**:**Re: st: RE: Re: return list and by***From:*<cthompson@dfpm.utah.edu>

- Prev by Date:
**st: ...stepwise regression...** - Next by Date:
**Re: st: ...stepwise regression...** - Previous by thread:
**st: ...stepwise regression...** - Next by thread:
**Re: st: RE: Re: return list and by** - Index(es):

© Copyright 1996–2017 StataCorp LLC | Terms of use | Privacy | Contact us | What's new | Site index |