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]

From |
Nick Cox <njcoxstata@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: generating a seq() going backwards and forward from a given timepoint? |

Date |
Fri, 14 Dec 2012 12:00:04 +0000 |

Looking again at Ariel's question, he does want sequence numbers and not dates shifted to a new origin, so my last part does not apply. In that case, I would recommend a three step. bys ID (date): egen period = seq() if date >= mdy(1,1,2012) by ID : egen nmissing = total(missing(period)) by ID : replace period = -nmissing + _n - 1 if missing(period) Nick On Fri, Dec 14, 2012 at 9:59 AM, Nick Cox <njcoxstata@gmail.com> wrote: > -seq()- as an -egen- function is part of official Stata but it has roots in > > STB-50 dm70 . . . . . . . . . . . . . . . . Extensions to generate, extended > (help egenodd if installed) . . . . . . . . . . . . . . . . N. J. Cox > 7/99 pp.9--17; STB Reprints Vol 9, pp.34--45 > 24 additional egen functions presented; includes various string, > data management, and statistical functions; > many of the egen functions added to Stata 7 > > STB-37 dm44 . . . . . . . . . . . . . . . . . . . . . Sequences of integers > (help seq if installed) . . . . . . . . . . . . . . . . . . N. J. Cox > 5/97 pp.2--4; STB Reprints Vol 7, pp.32--33 > egen now has seq() function > > so its generality and flexibility are a test of my work. (Bizarrely a > fragmentary reference to -seq- survives in the manual entry for > -egen-, but that is scheduled for removal.) > > You can specify a negative argument to -from()-, but Ariel wants here > is a starting value that may differ between panels. -from()- must be > supplied with an integer argument, and although you can set it up that > it sees the result of an expression that evaluates to an integer, that > result must be a constant, which as in this problem is likely to be > too inflexible for panels. > > So, there is a case for generalising -seq()- to accept more general > expressions, or possibly for adding an -origin()- option. My own > suggestion is that the latter would spoil the simplicity of -seq()- > > That said, I would just use > > gen period = date - mdy(1,1,2012) + 1 > > here and I suspect that whenever people have wanted something like > that it has seemed more natural to do it directly than to fire up > -egen-. > > -seq()- is a fairly trivial function. It is arguable that its main > feature is to support blocks of equal identifiers, which can be useful > e.g. for ANOVA problems. My recollection is that its origins lie in > wanting to use it and in reading about similar functionality in what > was then just described as S. > > Nick > > On Fri, Dec 14, 2012 at 3:31 AM, Ariel Linden, DrPH > <ariel.linden@gmail.com> wrote: > >> This is probably a very simple solution, but I am getting stuck. I'd like to >> generate a running sequence going both backwards and forwards from a >> specified timepoint. -seq()- is pretty straightforward (pun intended) for >> going forward, but I can't seem to figure out the backwards part. >> >> Below I have and data with the "period" variable that I'd like to achieve >> via code (I did this manually). For this example, I specified that >> 01/01/2012 is the starting point and ran the following code: >> >> . display date("01/01/2012", "MDY") >> 18993 >> >> . bys ID: egen period = seq() if date>=18993 >> (48 missing values generated) >> >> How do I get the backward periods (-1 to -24)? There will be IDs with >> varying numbers of periods available, so this must work via bysort ID, >> anchored on the same starting date for everyone: >> >> ID date period >> WC9 01/01/2010 -24 >> WC9 02/01/2010 -23 >> WC9 03/01/2010 -22 >> WC9 04/01/2010 -21 >> WC9 05/01/2010 -20 >> WC9 06/01/2010 -19 >> WC9 07/01/2010 -18 >> WC9 08/01/2010 -17 >> WC9 09/01/2010 -16 >> WC9 10/01/2010 -15 >> WC9 11/01/2010 -14 >> WC9 12/01/2010 -13 >> WC9 01/01/2011 -12 >> WC9 02/01/2011 -11 >> WC9 03/01/2011 -10 >> WC9 04/01/2011 -9 >> WC9 05/01/2011 -8 >> WC9 06/01/2011 -7 >> WC9 07/01/2011 -6 >> WC9 08/01/2011 -5 >> WC9 09/01/2011 -4 >> WC9 10/01/2011 -3 >> WC9 11/01/2011 -2 >> WC9 12/01/2011 -1 >> WC9 01/01/2012 1 >> WC9 02/01/2012 2 >> WC9 03/01/2012 3 >> WC9 04/01/2012 4 >> WC9 05/01/2012 5 >> WC9 06/01/2012 6 >> WC9 07/01/2012 7 >> WC9 08/01/2012 8 * * 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/

**References**:**st: generating a seq() going backwards and forward from a given timepoint?***From:*"Ariel Linden, DrPH" <ariel.linden@gmail.com>

**Re: st: generating a seq() going backwards and forward from a given timepoint?***From:*Nick Cox <njcoxstata@gmail.com>

- Prev by Date:
**Re: st: RE: logit for case control** - Next by Date:
**st: Extract identifier in the middle of a string variable** - Previous by thread:
**Re: st: generating a seq() going backwards and forward from a given timepoint?** - Next by thread:
**re: Re: st: generating a seq() going backwards and forward from a given timepoint?** - Index(es):