|
I usually just define a data step view to get around that.
data x / view=x;
input .... ;
cards;
...
;;;;
data y;
set x;
by a b c ;
if first.a ....;
run;
On Fri, 26 Nov 2010 13:38:04 -0500, Nat Wooding <nathani@VERIZON.NET> wrote:
>Jack
>
>It certainly would make life easier and now that you mention it, it looks
>like it should work but a trial gives
>
>ERROR: No SET, MERGE, UPDATE, or MODIFY statement is present
>
>So there appears to be a rule concerning such. Maybe they figure that the
>input records are not likely to be in order so there is no use in trying.
It
>might make a good SASWare Ballot suggestion.
>
>Are there any "Birdies" listening today?
>
>Nat
>
>-----Original Message-----
>From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of Jack
F.
>Hamilton
>Sent: Friday, November 26, 2010 1:29 PM
>To: SAS-L@LISTSERV.UGA.EDU
>Subject: Re: Lag Function
>
>I wish we could use FIRST. and LAST. with variables read with the INPUT
>statement. Maybe there's a syntactical reason why that wouldn't work, but
>logically it should be possible (maybe with a different syntax).
>
>
>On Nov 26, 2010, at 4:53 , Nat Wooding wrote:
>
>> Joe
>>
>> As I read your code, you want to reset your counting variable whenever a
>> pair of successive records are different but to increase it when you have
>> two or more identical records. This is very easily done using if first.
>type
>> logic. In my example below, I used Gerhard's modified input statement and
>> used a different counting variable name just so it would stand out.
>>
>> Nat Wooding
>>
>> DATA X;
>> LENGTH KEY $41.;
>> INPUT CARRIER $ @4 EMP_GRP_NBR : $6. @11 EMP_DIVISION : $4. @16
>> CONTRACT_NBR : $9.
>> @26 MEMBER_NBR : $2.;
>>
>> CARDS;
>> 01 030730 0001 04114422W 00
>> 01 030730 0001 04114422W 00
>> 01 030730 0001 04434800W 00
>> 01 030730 0001 04511270W 00
>> 01 030730 0001 04674974W 00
>> 01 030730 0001 05142413W 00
>> 01 030730 0001 05142413W 02
>> 01 030730 0001 051485322 00
>> 01 030730 0001 05433318W 00
>> 01 030730 0001 05433318W 01
>> 01 030730 0001 05433318W 02
>> 01 030730 0001 05455620W 00
>> 01 030730 0001 05455620W 01
>> 01 030730 0001 05455620W 02
>> 01 030730 0001 06003971W 00
>> 01 030730 0001 06003971W 01
>> 01 030730 0001 06042657W 00
>> 01 030730 0001 06042657W 02
>> 01 030730 0001 06042657W 03
>> 01 030730 0001 06042657W 04
>> 01 030730 0001 06042657W 05
>> 01 030730 0001 06266051W 00
>> 01 030730 0001 06266051W 01
>> 01 030730 0001 062705974 00
>> 01 030730 0001 062705974 02
>> 01 030730 0001 062705974 03
>> 01 030730 0001 111502697 00
>> 01 030730 0001 111502697 01
>> 01 030730 0001 111502697 02
>> 01 030730 0001 111502697 03
>> 01 030730 0001 111502697 05
>> 01 030730 0001 261711943 00
>> 01 030730 0001 261711943 02
>> 01 030730 0001 261711943 03
>> 01 030730 0001 261711943 04
>> 01 030730 0001 261740277 00
>> 01 030730 0001 262764072 00
>> 01 030730 0001 262764072 01
>> RUN;
>> Data Y;
>> set x;
>> by CARRIER EMP_GRP_NBR EMP_DIVISION CONTRACT_NBR MEMBER_NBR;
>> if first.member_nbr then MemberCount = 1;else MemberCount+1;
>> run;
>>
>> -----Original Message-----
>> From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of
>> SUBSCRIBE SAS-L Joe H. Smith
>> Sent: Friday, November 26, 2010 1:55 AM
>> To: SAS-L@LISTSERV.UGA.EDU
>> Subject: Lag Function
>>
>> Hi all ,
>>
>> I am using the below code ,but in my output i am unable to get correct
>> value for MCNT.For second observation MCNT value should be 2.
>>
>> DATA X;
>> LENGTH KEY $41.;
>> INPUT CARRIER $ @5 EMP_GRP_NBR $ @13 EMP_DIVISION $ @21 CONTRACT_NBR $9.
>> @33 MEMBER_NBR $;
>> retain mcnt 1;
>> IF CARRIER NE LAG(CARRIER) THEN MCNT= 1;
>> ELSE IF EMP_GRP_NBR NE LAG(EMP_GRP_NBR) THEN MCNT= 1;
>> ELSE IF EMP_DIVISION NE LAG(EMP_DIVISION) THEN MCNT= 1;
>> ELSE IF CONTRACT_NBR NE LAG(CONTRACT_NBR) THEN MCNT=1;
>> ELSE IF MEMBER_NBR NE LAG(MEMBER_NBR) THEN MCNT=1;
>> ELSE MCNT=MCNT + 1;
>> CARDS;
>> 01 030730 0001 04114422W 00
>> 01 030730 0001 04114422W 00
>> 01 030730 0001 04434800W 00
>> 01 030730 0001 04511270W 00
>> 01 030730 0001 04674974W 00
>> 01 030730 0001 05142413W 00
>> 01 030730 0001 05142413W 02
>> 01 030730 0001 051485322 00
>> 01 030730 0001 05433318W 00
>> 01 030730 0001 05433318W 01
>> 01 030730 0001 05433318W 02
>> 01 030730 0001 05455620W 00
>> 01 030730 0001 05455620W 01
>> 01 030730 0001 05455620W 02
>> 01 030730 0001 06003971W 00
>> 01 030730 0001 06003971W 01
>> 01 030730 0001 06042657W 00
>> 01 030730 0001 06042657W 02
>> 01 030730 0001 06042657W 03
>> 01 030730 0001 06042657W 04
>> 01 030730 0001 06042657W 05
>> 01 030730 0001 06266051W 00
>> 01 030730 0001 06266051W 01
>> 01 030730 0001 062705974 00
>> 01 030730 0001 062705974 02
>> 01 030730 0001 062705974 03
>> 01 030730 0001 111502697 00
>> 01 030730 0001 111502697 01
>> 01 030730 0001 111502697 02
>> 01 030730 0001 111502697 03
>> 01 030730 0001 111502697 05
>> 01 030730 0001 261711943 00
>> 01 030730 0001 261711943 02
>> 01 030730 0001 261711943 03
>> 01 030730 0001 261711943 04
>> 01 030730 0001 261740277 00
>> 01 030730 0001 262764072 00
>> 01 030730 0001 262764072 01
>> RUN;
>>
>> Please help out.
>>
>> Thanks & Regards,
>> MIKE
|