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;

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

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
  • 2 replies
  • 1199 views
  • 0 likes
  • 3 in conversation