Date: Thu, 28 Aug 2008 11:32:43 -0400
Reply-To: Jonathan Goldberg <jgoldberg@BIOMEDSYS.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Jonathan Goldberg <jgoldberg@BIOMEDSYS.COM>
Subject: Re: How to Create a flag for this logic in single datastep
Al:
It's not entirely clear what you want. However, if it's one flag record
per subj, then this:
data need;
retain hasdos 0;
merge x
y;
by subj;
if totdos > 0 then hasdos = 1;
if last.subj then do;
if hasdos = 1 & ^missing(tr) then flag = 'Y';
else flag = 'N';
hasdos = 0;
output;
end;
run;
gives this as output:
subj flag
1 Y
2 N
3 N
4 Y
The tool needed was the last.subj variable, which is generated (along with
the first.subj variable) automatically by SAS when a data set is read with
a "BY", as it is in the merge. The first. and last. variables are set to
1 when the associated condition is true, to 0 otherwise.
Check out the write-up in the documentation. It's a basic data step
programming tool, useful in many situations.
Jonathan
On Thu, 28 Aug 2008 08:07:23 -0700, Al <ali6058@GMAIL.COM> wrote:
>HI ,
> I have two datsets x , y .. I am supposed to merge them and
>generate the flag based on this
>condition if x.totdos>0 for anyday(doseno) and y.tr ne '' then Y;
>else N
>
>I am able to get this right but in multiple datasteps .. How can it be
>done in single datastep by merging
>
>
>
>Dataset X
>subj doseno totdos
>1 dose1 5
>1 dose2 5
>1 dose3 5
>2 dose1 7
>2 dose2 8
>2 dose3 9
>3 dose1 .
>4 dose1 7
>4 dose2 8
>4 dose3 9
>
>Dataset Y
>subj tr
>1 SD
>2
>4 PD
>
>
>Thanks in Advance