[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: residuals for each year |

Date |
Sun, 17 Oct 2004 17:11:03 +0100 |

(Previous posting premature!) Something like this would be my preferred approach. What may not be apparent is that each call to tempvar temp invokes a new temporary variable, which you can then refer to it as (clearly) `temp'; any and all temporary variables previously referrable to as `temp' are now inaccessible. You would have to copy their names before you assign your tempname to something else to maintain access to them. That is, first time around the loop, Stata's response to tempvar temp is to assign a new name (which might be something like __000007, say) which you and Stata are agreeing to refer to as `temp', and this name is then used to create a new variable. Second time around the loop, the response to the same command is to assign yet another a new name, say __0000008, and so forth. __000007 is there but you would not know from the code how to look at it any more. In Kit's case the only consequence will be a bundle of 41 temporary variables all in memory. Kit may have a few Gb to spare, and be unworried by the amount of memory used. However another way to do it is gen eps = . forvalues y = 1960/2000 { qui regress y x1 x2 x3 if year==`y' tempvar temp qui predict double `temp' if e(sample), resid qui replace eps = `temp' if e(sample) drop `temp' } which cuts down on the memory impact. Kit's doing it this way because -predict- does not have a -replace- option. In other circumstances, one way to be parsimonious with memory is to do with some working variable exactly what Kit is doing here with -eps-: generating it outside the loop and replacing each time around the loop. Nick n.j.cox@durham.ac.uk Christopher F Baum > > As useful as the by: prefix is, this is an example of where > a little bit of Stata programming goes a long way. > > > > forvalues y = 1960/2000 { > > qui regress y x1 x2 x3 if year==`y' > > qui predict double eps`y' if e(sample), resid > > } > > > > If you really want them in different variables. A common > > variation that > > I have used often that stuffs them all into one variable > > (saves a whole > > lot of space) is > > > > gen eps = . > > forvalues y = 1960/2000 { > > qui regress y x1 x2 x3 if year==`y' > > tempvar temp > > qui predict double `temp' if e(sample), resid > > qui replace eps = `temp' if e(sample) > > } > > > > Note that the 'if e(sample)' will generate residuals only for > > in-sample > > observations; e.g. if there are 1960 obs that do not enter the > > regression due to missing values in the reglist, they will not have > > residuals. * * 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/

- Prev by Date:
**st: RE: Re: residuals for each year** - Next by Date:
**st: -sxpose- available on SSC** - Previous by thread:
**st: RE: Re: residuals for each year** - Next by thread:
**st: -sxpose- available on SSC** - Index(es):

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