Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: generating a seq() going backwards and forward from a given timepoint?
From
Nick Cox <[email protected]>
To
[email protected]
Subject
Re: st: generating a seq() going backwards and forward from a given timepoint?
Date
Fri, 14 Dec 2012 09:59:06 +0000
-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
<[email protected]> 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/