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

Solved
Occasional Contributor
Posts: 18

# 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
Posts: 2,825

## 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;
```
--
Paige Miller

All Replies
Solution
‎06-22-2017 02:49 PM
Posts: 2,825

## 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;
```
--
Paige Miller
Occasional Contributor
Posts: 18

## 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:" ?
Posts: 2,825

## 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.

--
Paige Miller
☑ This topic is solved.