Date: Mon, 23 Mar 2009 12:24:17 -0700
Reply-To: "Schwarz, Barry A" <barry.a.schwarz@BOEING.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: "Schwarz, Barry A" <barry.a.schwarz@BOEING.COM>
Subject: Re: recalculate variables - retain?
In-Reply-To: <200903231826.n2NG05Gx017240@malibu.cc.uga.edu>
Content-Type: text/plain; charset="us-ascii"
Does your fist sentence mean that instead of being sorted by cicleid
they should be sorted by startdate? Sorting by id/cycle/startdate will
swap the two observations for cycle 3.
But your second sentence is confusing. Since cycle 5 and 6 have only
one observation each, there is nothing to sort within each cycle. Did
you mean that these two observations should be swapped because cycle 6
occurred first? If so, then sorting by id/startdate will swap the two
observations for cycle 3 and the one observation each for cycle 5 and 6.
But, if a cycle with multiple observations has dates far enough apart,
there might be intervening cycles between these observations.
In either case, after sorting you would have to reconstruct the cycle
and cycleid variables.
Change the first observation for cycle 3 to 15 Oct and tell us what the
output should be.
If you can guarantee that the cycles never overlap then
Sort by id and startdate
Loop through observations
If first observation for this id
Set new_cycle to 0
Set saved_cycle to missing
Endif
If cycle different from saved_cycle
Increment new_cycle
Set new_cycleid to 0
Save cycle in saved_cycle
Endif
Set cycle to new_cycle
Increment new_cycleid
Set cycleid to new_cycleid
Write observation to data set
Endloop
-----Original Message-----
From: Pete Miller
Sent: Monday, March 23, 2009 11:26 AM
To: SAS-L@LISTSERV.UGA.EDU
Subject: recalculate variables - retain?
Dear list members,
i've got following problem with a dataset that looks like:
data have;
input id cycle cycleid startdate enddate;
cards;
1 1 1 1JUL2005 31JUL2005
1 2 1 1AUG2005 31AUG2005
1 3 1 15SEP2005 30SEP2005
1 3 2 1SEP2005 14SEP2005
1 4 1 1OCT2005 30OCT2005
1 5 1 1DEC2005 31DEC2005
1 6 1 1NOV2005 30NOV2005
;
run;
My problem is, that for cycle= 3 the subcycles or cycleid's are correct,
bur they should be in order of the date variables. This should also be
done for the cycles 5 and 6;
so that the dataset should look like:
data need;
input id cycle cycleid startdate enddate;
cards;
1 1 1 1JUL2005 31JUL2005
1 2 1 1AUG2005 31AUG2005
1 3 1 1SEP2005 14SEP2005
1 3 2 15SEP2005 30SEP2005
1 4 1 1OCT2005 30OCT2005
1 5 1 1NOV2005 30NOV2005
1 6 1 1DEC2005 31DEC2005
;
run;
When using retain I must sort by cycle,to avoid the error, not sorted;
when sorting by date and then by cycle,i get no cycleid's.
can someone show me a way how to do this?
Thank you very much
Pete