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 

 

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
  • 4 replies
  • 4123 views
  • 1 like
  • 2 in conversation