How to use ARRAYS to make program efficient!!! do-loops

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 14
Accepted Solution

How to use ARRAYS to make program efficient!!! do-loops

HI All,

 

I'm trying to make my program more efficient by using Arrays but can't find a way to make it work. Here is the current program:

 

data final;
  merge visitcal tvisit2 eos;
  by subject;
        
	 if END_OF_TREATMENT ne . then do;
                if CYCLE_1_DAY_14  >= END_OF_TREATMENT then  CYCLE_1_DAY_14= .;
		if CYCLE_2_DAY_1   >= END_OF_TREATMENT then  CYCLE_2_DAY_1 = .;
		if CYCLE_2_DAY_15  >= END_OF_TREATMENT then  CYCLE_2_DAY_15= .;
		if CYCLE_3_DAY_1   >= END_OF_TREATMENT then  CYCLE_3_DAY_1 = .;
		if CYCLE_3_DAY_15  >= END_OF_TREATMENT then  CYCLE_3_DAY_15= .;
		if CYCLE_4_DAY_1   >= END_OF_TREATMENT then  CYCLE_4_DAY_1 = .;
		if CYCLE_4_DAY_15  >= END_OF_TREATMENT then  CYCLE_4_DAY_15= .;
		if CYCLE_5_DAY_1   >= END_OF_TREATMENT then  CYCLE_5_DAY_1 = .;
		if CYCLE_5_DAY_15  >= END_OF_TREATMENT then  CYCLE_5_DAY_15= .;
		if CYCLE_6_DAY_1   >= END_OF_TREATMENT then  CYCLE_6_DAY_1 = .;
		if CYCLE_6_DAY_15  >= END_OF_TREATMENT then  CYCLE_6_DAY_15= .;
		if CYCLE_7_DAY_1   >= END_OF_TREATMENT then  CYCLE_7_DAY_1 = .;
		if CYCLE_7_DAY_15  >= END_OF_TREATMENT then  CYCLE_7_DAY_15= .;
		if CYCLE_8_DAY_1   >= END_OF_TREATMENT then  CYCLE_8_DAY_1 = .;
		if CYCLE_8_DAY_15  >= END_OF_TREATMENT then  CYCLE_8_DAY_15= .;
		if CYCLE_9_DAY_1   >= END_OF_TREATMENT then  CYCLE_9_DAY_1 = .;
		if CYCLE_9_DAY_15  >= END_OF_TREATMENT then  CYCLE_9_DAY_15= .;
		if CYCLE_10_DAY_1  >= END_OF_TREATMENT then  CYCLE_10_DAY_1 = .;
		if CYCLE_10_DAY_15 >= END_OF_TREATMENT then  CYCLE_10_DAY_15= .;
		if CYCLE_11_DAY_1  >= END_OF_TREATMENT then  CYCLE_11_DAY_1 = .;
		if CYCLE_11_DAY_15 >= END_OF_TREATMENT then  CYCLE_11_DAY_15= .;
		if CYCLE_12_DAY_1  >= END_OF_TREATMENT then  CYCLE_12_DAY_1 = .;
		if CYCLE_12_DAY_15 >= END_OF_TREATMENT then  CYCLE_12_DAY_15= .;
            end;
run;

 

Basically I want to make all "Cycles" = . based on the following conditions. Thanks!


Accepted Solutions
Solution
‎06-22-2017 02:49 PM
Trusted Advisor
Posts: 1,498

Re: How to use ARRAYS to make program efficient!!! do-loops

To save myself some typing, I'm not going to type all of your variable names

 

array x CYCLE_1_DAY_14 CYCLE_2_DAY_1 CYCLE_2_DAY_15;
if end_of_treatment ne . then do i=1 to dim(x);
    if x(i)  >= END_OF_TREATMENT then  x(i) = .;
end;

View solution in original post


All Replies
Solution
‎06-22-2017 02:49 PM
Trusted Advisor
Posts: 1,498

Re: How to use ARRAYS to make program efficient!!! do-loops

To save myself some typing, I'm not going to type all of your variable names

 

array x CYCLE_1_DAY_14 CYCLE_2_DAY_1 CYCLE_2_DAY_15;
if end_of_treatment ne . then do i=1 to dim(x);
    if x(i)  >= END_OF_TREATMENT then  x(i) = .;
end;
Occasional Contributor
Posts: 14

Re: How to use ARRAYS to make program efficient!!! do-loops

thanks for the quick response, but is there a way where i dont have to type all variable names? maybe something like "cycle:" ?
Trusted Advisor
Posts: 1,498

Re: How to use ARRAYS to make program efficient!!! do-loops

Homework assignment: try it and see if it works.

 

If not, then there are ways of extracting the variables names from DICTIONARY tables into a macro variable that ought to eliminate the need to type all of the variable names.

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 3 replies
  • 107 views
  • 0 likes
  • 2 in conversation