BookmarkSubscribeRSS Feed
Shantaram
Calcite | Level 5

Hi,

Please refer the following input and output.

 

 

data have;
input CUSTOMER_ID policy $2. date anydtdte23.;
format date date9.;
cards;
1057086 a 21AUG2014
1057086 b 25AUG2014
1057086 c 17SEP2014
1057086 d 17SEP2014
1057086 e 19SEP2014
1057086 f 26SEP2014
1057086 g 26SEP2014
1057086 h 26Oct2015
1057086 i 21Dec2016
1020006 j 22Nov2011
1020006 k 21Dec2012
1020006 l 30Jan2015
1020006 m 30Jan2015
1020006 o n 30Jan2015
1020006 p 30Jan2015
1020006 q 30Jan2015
1020006 r 30Jan2015
1020006 s 31Jan2018
;
run;

 

Output Want in following format.

 

 

 CUSTOMER_ID policy date Count
1020006 o . 0
1020006 j 22-Nov-11 1
1020006 k 21-Dec-12 2
1020006 l 30-Jan-15 3
1020006 m 30-Jan-15 3
1020006 p 30-Jan-15 3
1020006 q 30-Jan-15 3
1020006 r 30-Jan-15 3
1020006 s 31-Jan-18 8
1057086 a 21-Aug-14 0
1057086 b 25-Aug-14 1
1057086 c 17-Sep-14 2
1057086 d 17-Sep-14 2
1057086 e 19-Sep-14 4
1057086 f 26-Sep-14 5
1057086 g 26-Sep-14 5
1057086 h 26-Oct-15 7
1057086 i 21-Dec-16 8

2 REPLIES 2
Kurt_Bremser
Super User

Sort and use some less-than-simple by-group processing:

data have;
input CUSTOMER_ID policy $2. date anydtdte23.;
format date date9.;
cards;
1057086 a 21AUG2014
1057086 b 25AUG2014
1057086 c 17SEP2014
1057086 d 17SEP2014
1057086 e 19SEP2014
1057086 f 26SEP2014
1057086 g 26SEP2014
1057086 h 26Oct2015
1057086 i 21Dec2016
1020006 j 22Nov2011
1020006 k 21Dec2012
1020006 l 30Jan2015
1020006 m 30Jan2015
1020006 o n 30Jan2015
1020006 p 30Jan2015
1020006 q 30Jan2015
1020006 r 30Jan2015
1020006 s 31Jan2018
;
run;

proc sort data=have;
by customer_id date;
run;

data want;
set have;
by customer_id date;
retain count sec_count;
if first.customer_id
then do;
  count = 0;
  sec_count = 1;
end;
else if first.date
then do;
  count + sec_count;
  sec_count = 1;
end;
else sec_count + 1;
drop sec_count;
run;

proc print data=want noobs;
run;

Result:

CUSTOMER_
    ID       policy         date    count

 1020006       o               .      0  
 1020006       j       22NOV2011      1  
 1020006       k       21DEC2012      2  
 1020006       l       30JAN2015      3  
 1020006       m       30JAN2015      3  
 1020006       p       30JAN2015      3  
 1020006       q       30JAN2015      3  
 1020006       r       30JAN2015      3  
 1020006       s       31JAN2018      8  
 1057086       a       21AUG2014      0  
 1057086       b       25AUG2014      1  
 1057086       c       17SEP2014      2  
 1057086       d       17SEP2014      2  
 1057086       e       19SEP2014      4  
 1057086       f       26SEP2014      5  
 1057086       g       26SEP2014      5  
 1057086       h       26OCT2015      7  
 1057086       i       21DEC2016      8  
Shantaram
Calcite | Level 5

Thanks KurtBremser.

 

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 1916 views
  • 2 likes
  • 2 in conversation