Bookmark and Share

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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index