Building a longitudial data

Accepted Solution Solved
Reply
Contributor
Posts: 29
Accepted Solution

Building a longitudial data

I am building a longitudial data for my study.  The input data has id, year, event, and event year variables.  I am trying to create a variable z which is time elapsed from the last event.  Can someone show a data step that computes z?  Thanks.

id   year     event    event_yr       z

1    1986      0          .

1    1987      0          .

1    1988      0          .

1    1989      0          .

1    1990      0          .

1    1991      0          .

1    1992      0          .

1    1993      0          .

1    1994      0          .

1    1995      0          .

1    1996      1       1996        

1    1997      0          .

1    1998      0          .

1    1999      0          .

1    2000      0          .

1    2001      1       2001              5      

1    2002      0          .

1    2003      0          .

1    2004      0          .

1    2005      0          .

1    2006      0          .

1    2007      0          .

1    2008      1       2008              7

1    2009      0          .

1    2010      0          .

1    2011      0          .

1    2012      0          .

1    2012      0          .

2    2010      0          .

2    2011      1       2011              0

2    2012      0          .

3    2007      0          .

3    2008      1       2008              0

3    2009      1       2009              1

3    2010      0          .

3    2011      0          .

3    2012      1       2012              3


Accepted Solutions
Solution
‎10-31-2013 10:58 PM
PROC Star
Posts: 7,487

Re: Building a longitudial data

: Assuming your data are already sorted like in your example, and that you really want to assign a 0 for id eq 1 and event_yr eq 1996, then something like the following should suffice:

data want;

  set have;

  by id;

  retain last_event;

  if first.id then call missing(last_event);

  if event eq 1 then do;

    z=ifn(last_event gt 0,event_yr-last_event, 0);

    last_event=event_yr;

  end;

run;

View solution in original post


All Replies
Solution
‎10-31-2013 10:58 PM
PROC Star
Posts: 7,487

Re: Building a longitudial data

: Assuming your data are already sorted like in your example, and that you really want to assign a 0 for id eq 1 and event_yr eq 1996, then something like the following should suffice:

data want;

  set have;

  by id;

  retain last_event;

  if first.id then call missing(last_event);

  if event eq 1 then do;

    z=ifn(last_event gt 0,event_yr-last_event, 0);

    last_event=event_yr;

  end;

run;

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 148 views
  • 0 likes
  • 2 in conversation