BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Trishjais
Obsidian | Level 7

Hello Friends,

 

I have an urgent requirement to create a flag based on some variable. My input data looks like this.

Patient_IDTransaction dateProduct_strengthBase_product
Mike1/1/2018BREO_100BREO
Mike1/1/2018BREO_200BREO
Mike1/12/2018BREO_100BREO
Mike1/12/2018BREO_200BREO
Mike1/15/2018SPIRIVA_HANDSPIRIVA_HAND
Mike1/15/2018SPIRIVA_HANDSPIRIVA_HAND
Mike1/18/2018XOLAIR_150XOLAIR
Mike1/18/2018XOLAIR_75XOLAIR
Robert1/19/2018ADVAIR_100ADVAIR
Robert1/19/2018ADVAIR_250ADVAIR
Robert1/19/2018ADVAIR_500ADVAIR
Robert1/19/2018SYMBICORT_100SYMBICORT
Robert1/19/2018SYMBICORT_200SYMBICORT
Robert1/19/2018XOLAIR_150XOLAIR
Robert1/19/2018XOLAIR_75XOLAIR

 

My objective is to create a flag based on patient_id transaction_date and base_prod and increment this flag within by group when base_product changes. The output table should be like below.

 

Patient_IDTransaction dateProduct_strengthBase_productFlag
Mike1/1/2018BREO_100BREO1
Mike1/1/2018BREO_200BREO1
Mike1/12/2018BREO_100BREO2
Mike1/12/2018BREO_200BREO2
Mike1/15/2018SPIRIVA_HANDSPIRIVA_HAND3
Mike1/15/2018SPIRIVA_HANDSPIRIVA_HAND3
Mike1/18/2018XOLAIR_150XOLAIR4
Mike1/18/2018XOLAIR_75XOLAIR4
Robert1/19/2018ADVAIR_100ADVAIR1
Robert1/19/2018ADVAIR_250ADVAIR1
Robert1/19/2018ADVAIR_500ADVAIR1
Robert1/19/2018SYMBICORT_100SYMBICORT2
Robert1/19/2018SYMBICORT_200SYMBICORT2
Robert1/19/2018XOLAIR_150XOLAIR3
Robert1/19/2018XOLAIR_75XOLAIR3
1 ACCEPTED SOLUTION

Accepted Solutions
novinosrin
Tourmaline | Level 20
data have;
input Patient_ID $	Transactiondate :mmddyy10.	Product_strength :$20.	Base_product : $20.;
format Transactiondate mmddyy10.;
cards;
Mike	1/1/2018	BREO_100	BREO
Mike	1/1/2018	BREO_200	BREO
Mike	1/12/2018	BREO_100	BREO
Mike	1/12/2018	BREO_200	BREO
Mike	1/15/2018	SPIRIVA_HAND	SPIRIVA_HAND
Mike	1/15/2018	SPIRIVA_HAND	SPIRIVA_HAND
Mike	1/18/2018	XOLAIR_150	XOLAIR
Mike	1/18/2018	XOLAIR_75	XOLAIR
Robert	1/19/2018	ADVAIR_100	ADVAIR
Robert	1/19/2018	ADVAIR_250	ADVAIR
Robert	1/19/2018	ADVAIR_500	ADVAIR
Robert	1/19/2018	SYMBICORT_100	SYMBICORT
Robert	1/19/2018	SYMBICORT_200	SYMBICORT
Robert	1/19/2018	XOLAIR_150	XOLAIR
Robert	1/19/2018	XOLAIR_75	XOLAIR
;

data want;
if _n_=1 then do;
 dcl hash H (dataset:'have') ;
   h.definekey  ('patient_id',' transactiondate','  Base_product') ;
   h.definedone () ;
   end;
set have;
by patient_id;
if first.patient_id then flag=0;
if h.check()=0 then do; flag+1;rc=h.remove();end;
drop rc;
run;


 

EDIT: To correct a typo from 'THE' to 'THEN '

View solution in original post

4 REPLIES 4
novinosrin
Tourmaline | Level 20

I can't see a change in base_product here and so how did flag increment to 2 here?

 

Base_product Flag
Mike 1/1/2018 BREO_100 BREO 1
Mike 1/1/2018 BREO_200 BREO 1
Mike 1/12/2018 BREO_100 BREO 2
Mike 1/12/2018 BREO_200 BREO 2
Trishjais
Obsidian | Level 7

Hello 

novinosrin
Tourmaline | Level 20
data have;
input Patient_ID $	Transactiondate :mmddyy10.	Product_strength :$20.	Base_product : $20.;
format Transactiondate mmddyy10.;
cards;
Mike	1/1/2018	BREO_100	BREO
Mike	1/1/2018	BREO_200	BREO
Mike	1/12/2018	BREO_100	BREO
Mike	1/12/2018	BREO_200	BREO
Mike	1/15/2018	SPIRIVA_HAND	SPIRIVA_HAND
Mike	1/15/2018	SPIRIVA_HAND	SPIRIVA_HAND
Mike	1/18/2018	XOLAIR_150	XOLAIR
Mike	1/18/2018	XOLAIR_75	XOLAIR
Robert	1/19/2018	ADVAIR_100	ADVAIR
Robert	1/19/2018	ADVAIR_250	ADVAIR
Robert	1/19/2018	ADVAIR_500	ADVAIR
Robert	1/19/2018	SYMBICORT_100	SYMBICORT
Robert	1/19/2018	SYMBICORT_200	SYMBICORT
Robert	1/19/2018	XOLAIR_150	XOLAIR
Robert	1/19/2018	XOLAIR_75	XOLAIR
;

data want;
if _n_=1 then do;
 dcl hash H (dataset:'have') ;
   h.definekey  ('patient_id',' transactiondate','  Base_product') ;
   h.definedone () ;
   end;
set have;
by patient_id;
if first.patient_id then flag=0;
if h.check()=0 then do; flag+1;rc=h.remove();end;
drop rc;
run;


 

EDIT: To correct a typo from 'THE' to 'THEN '

Trishjais
Obsidian | Level 7

Thanks Much 

 

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 4 replies
  • 3284 views
  • 1 like
  • 2 in conversation