Date: Tue, 8 Oct 1996 18:00:42 +0100
Reply-To: Hans-Peter Piepho <piepho@WIZ.UNI-KASSEL.DE>
Sender: "SAS(r) Discussion" <SAS-L@UGA.CC.UGA.EDU>
From: Hans-Peter Piepho <piepho@WIZ.UNI-KASSEL.DE>
Subject: Re: A SUBSET QUESTION
> Hi, friends, I need help for a data subsetting task:
>
> data: similar to the sample below
>
> want: for every id, capture every unit change. (e.g. for id=1, keep
> date=960101, 960104; for id=2 keep date=960212, 960214, 960216...)
>
>
> ID DATE UNIT
> ... ... ...
> 1 960101 A
> 1 960102 A
> 1 960103 A
> 1 960104 B
> 1 960105 B
> 1 960106 B
> 2 960212 A
> 2 960213 A
> 2 960214 B
> 2 960215 B
> 2 960216 A
> 2 960217 A
> 3 960123 C
> 3 960124 C
> 3 960125 C
> 3 960126 C
> 4 960303 B
> 4 960304 B
> 4 960305 A
> 4 960306 A
> 4 960307 C
> 4 960308 C
> 4 960309 C
> 5 960511 A
> 5 960512 B
> 5 960513 B
> 5 960514 A
> 5 960515 A
> ... ... ...
>
> Any suggestion will be appreciated.
>
> Andy
>
>
Try this:
DATA temp;
INPUT id date unit $;
CARDS;
1 960101 A
1 960102 A
1 960103 A
1 960104 B
1 960105 B
1 960106 B
2 960212 A
2 960213 A
2 960214 B
2 960215 B
2 960216 A
2 960217 A
3 960123 C
3 960124 C
3 960125 C
3 960126 C
4 960303 B
4 960304 B
4 960305 A
4 960306 A
4 960307 C
4 960308 C
4 960309 C
5 960511 A
5 960512 B
5 960513 B
5 960514 A
5 960515 A
;
DATA result;
DO i=1 TO last-1;
SET temp POINT=i;
unit_pre=unit;
IF i=1 THEN OUTPUT;
next=i+1;
SET temp POINT=next NOBS=last;
unit_nex=unit;
IF unit_nex^=unit_pre THEN output;
END;
STOP;
PROC PRINT DATA=result;
RUN;
OBS ID DATE UNIT UNIT_PRE UNIT_NEX
1 1 960101 A A
2 1 960104 B A B
3 2 960212 A B A
4 2 960214 B A B
5 2 960216 A B A
6 3 960123 C A C
7 4 960303 B C B
8 4 960305 A B A
9 4 960307 C A C
10 5 960511 A C A
11 5 960512 B A B
12 5 960514 A B A
Hans-Peter
_______________________________________________________________________
Hans-Peter Piepho
Institut f. Nutzpflanzenkunde WWW: http://www.wiz.uni-kassel.de/fts/
Universitaet Kassel Mail: piepho@wiz.uni-kassel.de
Steinstrasse 19 Fax: +49 5542 98 1230
37213 Witzenhausen, Germany Phone: +49 5542 98 1248