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

I'm working with medical administrative data, and I'm trying to flag patients who have had certain diagnoses or medical procedures.  I've tried searching online and I've come across variations of do-loops or arrays, but I haven't been able to figure out how to apply them to my specific data.  So far I've been using a data step and listing each variable.  This works, but obviously it's unwieldy and not a good long-term solution.  I've only shown 2 lists here, but the final version will have about 20.  Also note that some of the codes are stems, so that O03 includes O031, O032, O035, etc.  That's why I used "in:".

 

%let EPL_list = ("O021","O03");
%let excl_list_pm70154d = ("59820","59812","59821","0UDB");

DATA temp.Index_cases; SET comb.med_comm_2018_2021;

IF PRINCIPAL_DIAGNOSIS_CODE in: (&EPL_list.) THEN EPL_flag = 1; 
	ELSE IF DIAGNOSIS_CODE_1 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_2 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_3 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_4 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_5 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_6 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_7 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_8 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_9 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_10 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_11 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_12 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_13 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_14 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_15 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_16 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_17 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_18 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_19 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_20 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_21 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_22 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_23 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_24 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_25 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_26 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_27 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_28 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_29 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_30 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_31 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_32 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_33 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_34 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_35 in: (&EPL_list.) THEN EPL_flag = 1;
	ELSE IF DIAGNOSIS_CODE_36 in: (&EPL_list.) THEN EPL_flag = 1;
		ELSE EPL_flag = 0;


IF PROCEDURE_CODE in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_1 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_2 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_3 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_4 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_5 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_6 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_7 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_8 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_9 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_10 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_11 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_12 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_13 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_14 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_15 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_16 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_17 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_18 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_19 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_20 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_21 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_22 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_23 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_24 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;
	ELSE IF ICD_PROCEDURE_CODE_25 in: (&excl_list_pm70154d.) THEN excl_list_pm70154d = 1;		
		ELSE excl_list_pm70154d = 0;
RUN;
1 ACCEPTED SOLUTION

Accepted Solutions
Tom
Super User Tom
Super User

Use arrays.

%let EPL_list = ("O021","O03");
%let excl_list_pm70154d = ("59820","59812","59821","0UDB");

data temp.Index_cases;
  set comb.med_comm_2018_2021;
  array dx PRINCIPAL_DIAGNOSIS_CODE DIAGNOSIS_CODE_1-DIAGNOSIS_CODE_36;
  do index=1 to dim(dx) until(EPL_flag);
    EPL_flag= dx[index] in: &epl_list. ;
  end;
  array px PROCEDURE_CODE ICD_PROCEDURE_CODE_1-ICD_PROCEDURE_CODE_25;
  do index=1 to dim(px) until(excl_list_pm70154d);
    excl_list_pm70154d = px[index] in: &excl_list_pm70154d.;
  end;
run;

View solution in original post

2 REPLIES 2
Astounding
PROC Star

Here's how it could look using arrays:

array pcodes {37} PRINCIPAL_DIAGNOSIS_CODE diagnosis_code_1 - diagnosis_code_36;
EPL_flag = 0;
do _n_=1 to 37 until (EPL_flag = 1);
   if pcodes{_n_} in: (&EPL_list.) THEN EPL_flag = 1; 
end;

That replaces just one of the groupings of statements.

Tom
Super User Tom
Super User

Use arrays.

%let EPL_list = ("O021","O03");
%let excl_list_pm70154d = ("59820","59812","59821","0UDB");

data temp.Index_cases;
  set comb.med_comm_2018_2021;
  array dx PRINCIPAL_DIAGNOSIS_CODE DIAGNOSIS_CODE_1-DIAGNOSIS_CODE_36;
  do index=1 to dim(dx) until(EPL_flag);
    EPL_flag= dx[index] in: &epl_list. ;
  end;
  array px PROCEDURE_CODE ICD_PROCEDURE_CODE_1-ICD_PROCEDURE_CODE_25;
  do index=1 to dim(px) until(excl_list_pm70154d);
    excl_list_pm70154d = px[index] in: &excl_list_pm70154d.;
  end;
run;
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
  • 1819 views
  • 0 likes
  • 3 in conversation