A DO loop in SAS can be used to do some action a certain number of times.
There are three basic DO loops in SAS:
1. DO Loop
data data1;
x = 0;
do i = 1 to 10;
x = i*4;
output;
end;
run;
What It Does: This loop performs 10 iterations, from i = 1 to 10, where the value in each row is equal to i multiplied by 4.
When It Stops: This loop only stops after 10 iterations have been performed.
2. DO WHILE Loop
data data2;
x = 0;
do i = 1 to 10 while(x < 20);
x = i*4;
output;
end;
run;
What It Does: This loop will try to perform 10 iterations, from i = 1 to 10, where the value in each row is equal to i multiplied by 4.
When It Stops: This loop will stop when the value of x exceeds 20 or when 10 iterations have been performed, whichever comes first.
3. DO UNTIL Loop
data data3;
x = 0;
do i = 1 to 10 until(x > 30);
x = i*4;
output;
end;
run;
What It Does: This loop will try to perform 10 iterations, from i = 1 to 10, where the value in each row is equal to i multiplied by 4.
When It Stops: This loop will stop when the value of x exceeds 30 or when 10 iterations have been performed, whichever comes first.
The following examples show how to use each DO loop in practice.
Example 1: DO Loop
We can use the following DO loop to create a dataset with 10 rows:
/*use DO loop to create dataset*/
data data1;
x = 0;
do i = 1 to 10;
x = i*4;
output;
end;
run;
/*view dataset*/
proc print data=data1;
The result is a dataset that contains 10 rows where the values in column i range from 1 to 10 and the values in column x range from 4 to 40.
Note that you can use drop i to drop the index column from the dataset:
/*use DO loop to create dataset*/
data data1;
x = 0;
do i = 1 to 10;
x = i*4;
output;
end;
drop i;
run;
/*view dataset*/
proc print data=data1;
Example 2: DO WHILE Loop
We can use the following DO WHILE loop to create a dataset with a variable i from i = 1 to 10, where the value in each row is equal to i multiplied by 4 while x is less than 20:
/*use DO WHILE loop to create dataset*/
data data2;
x = 0;
do i = 1 to 10 while(x < 20);
x = i*4;
output;
end;
run;
/*view dataset*/
proc print data=data2;
Notice that the loop stopped creating rows once x reached 20.
Example 3: DO UNTIL Loop
We can use the following DO UNTIL loop to create a dataset with a variable i from i = 1 to 10, where the value in each row is equal to i multiplied by 4 until x is greater than 30:
/*use DO UNTIL loop to create dataset*/
data data3;
x = 0;
do i = 1 to 10 until(x > 30);
x = i*4;
output;
end;
run;
/*view dataset*/
proc print data=data3;
Notice that the loop stopped creating rows once x exceeded 30.
Additional Resources
The following tutorials explain how to perform other common tasks in SAS:
How to Normalize Data in SAS
How to Remove Duplicates in SAS
How to Replace Missing Values with Zero in SAS