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

From |
"Nick Winter" <nwinter@policystudies.com> |

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

Subject |
st: RE: RE: using max and sdev functions more flexibly |

Date |
Mon, 4 Nov 2002 11:13:38 -0500 |

> -----Original Message----- > From: Nick Winter > Sent: Monday, November 04, 2002 10:10 AM > To: statalist@hsphsun2.harvard.edu > Subject: st: RE: using max and sdev functions more flexibly > > > > -----Original Message----- > > From: Pezzini,S (pgr) [mailto:S.Pezzini@lse.ac.uk] > > Sent: Monday, November 04, 2002 9:49 AM > > To: statalist@hsphsun2.harvard.edu > > Subject: st: using max and sdev functions more flexibly > > > > > > Dear Stata-listers, > > > > as my programming skills are very low, I would like to ask if > > someone could help me get around a problem that I've been > > trying to solve without success. > > > > The starting point is a dataset with inflation for years from > > 1900 to 1995 and some country codes. > > I would like to use the max and sdev function in order to > > compute the maximum and the standard deviation of inflation > > over an interval from 1920 (and successive decades) to every > > year between 1975 and 1995, by country. > > If I type: > > > > by ccode: egen maxinf=max(inflation) if year>=1920 > > > > this only allows me to compute max and sdev over 1920 and > > 1995, i.e. I get a constant over the whole time interval, not > > staggered by year. I can't get to incorporate the information > > "compute the standard deviation or the max UP TO EACH YEAR IN > > THE INTERVAL [1975; 1995]". > > > > Maybe my request will be clearer if I tell you that I was > > able to get what I wanted with another function, sum. > > By typing: > > by ccode: gen cuminf=sum(abs(inflation)) if year>=1920 > > I was able to compute the cumulative inflation from 1920 up > > to each year in the interval [1975; 1995]. This was possible > > because "gen y=sum(x)", computes a sum where the j-th obs on > > y contains the sum of the first through j-th observations on x. > > > > Finally, I am using Stata 7.0 SE in Windows environment. > > > > Maybe this is a straightforward problem for you, so I would > > be very grateful if you could point me to a solution. > > > > Thanks a lot, > > > > Silvia Pezzini > > So you want the "running maximum", it sounds like. This should do it: > > generate maxinf = inflation > replace maxinf = max(maxinf,l.maxinf) > I didn't take note of your desire to do this -by ccode- in my initial posting. If your data are properly -tsset-, then the code above will work. (And Nick Cox's suggestion of -egenmore-'s record() function will also work. But the standard deviation code I originally listed does not work. One approach is to use the alternate form of the standard deviation calculation (which doesn't have great numerical accuracy, but might serve your purposes): by ccode (year) : gen double s_infl=sum(infl) by ccode (year) : gen double s_infl2 = sum(infl^2) by ccode (year) : gen n = sum(1) gen run_sd = sqrt((n*s_infl2 - s_infl^2)/(n*(n-1))) drop s_infl s_infl2 n -Nick Winter * * 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: Installation of GAM** - Next by Date:
**st: RE: Substituting string values** - Previous by thread:
**st: Substituting string values** - Next by thread:
**st: RE: Substituting string values** - Index(es):

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