Date: Mon, 8 Aug 2011 11:17:13 -0500
Reply-To: "Data _null_;" <iebupdte@GMAIL.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: "Data _null_;" <iebupdte@GMAIL.COM>
Subject: Re: Constructing flagged Intervals
In-Reply-To: <201108081516.p78AlHKN017883@waikiki.cc.uga.edu>
Content-Type: text/plain; charset=ISO-8859-1
This ain't fancy but I think it works. Not sure when everthing needs
a reset. I use FIRST.IDB.
1) create the groups
2) index using info of last obs in group NE 0.
data have;
input Date:$5. (IDA IDB)(:$1.) VarA;
cards;
01AUG X A 0
01AUG X A .
01AUG X A .
01AUG X A 0
01AUG X A 0
01AUG X A .
01AUG X A .
01AUG X A .
01AUG X A 0
01AUG X A 0
01AUG X A .
01AUG X A .
01AUG X A 42
01AUG X A 0
01AUG X A .
01AUG X A 0
;;;;
run;
data
need(drop=switch)
notZero(keep=date ida idb Group)
;
switch = 0;
do until(last.idb);
set have;
by date id:;
if not switch and not Missing(varA) then do;
Group + 1;
switch = 1;
end;
else if switch and not missing(vara) then do;
switch=0;
if vara ne 0 then output notZero;
end;
output need;
end;
run;
data need;
merge need(in=in1) notZero(in=in2);
by date ida: Group;
if first.idb then GrpIndex = 0;
if first.Group and not in2 then GrpIndex + 1;
if in2
then flag = 0;
else flag = GrpIndex;
*drop GR:;
run;
proc print data=need;
run;
On Mon, Aug 8, 2011 at 10:16 AM, Randy <randistan69@hotmail.com> wrote:
> I am still struggling with this.
> Here is the data set
>
> Date IDA IDB VarA
> 01AUG X A 0
> 01AUG X A .
> 01AUG X A .
> 01AUG X A 0
> 01AUG X A 0
> 01AUG X A .
> 01AUG X A .
> 01AUG X A .
> 01AUG X A 0
> 01AUG X A 0
> 01AUG X A .
> 01AUG X A .
> 01AUG X A 42
> 01AUG X A 0
> 01AUG X A .
> 01AUG X A 0
>
>
>
> The data set that I want is as follows
>
> Date IDA IDB VarA Flag
> 01AUG X A 0 1
> 01AUG X A . 1
> 01AUG X A . 1
> 01AUG X A 0 1
> 01AUG X A 0 2
> 01AUG X A . 2
> 01AUG X A . 2
> 01AUG X A . 2
> 01AUG X A 0 2
> 01AUG X A 0 0
> 01AUG X A . 0
> 01AUG X A . 0
> 01AUG X A 42 0
> 01AUG X A 0 3
> 01AUG X A . 3
> 01AUG X A 0 3
>
> Please help
> Randy
>