Chapter Contents

Previous

Next
DO, Iterative

DO, Iterative



Executes statements between DO and END repetitively based on the value of an index variable

Valid: in a DATA step
Category: Control
Type: Executable


Syntax
Arguments
Comparisons
Examples
Example 1: Using Various Forms of the Iterative DO Statement
Example 2: Using the Iterative DO Statement without Infinite Looping
Example 3: Stopping Execution of the DO Loop
See Also

Syntax

DO index-variable=specification-1 <, . . . specification-n>;
. . . more SAS statements . . .
END;

Arguments

index-variable
names a variable whose value governs execution of the DO group. The index -variable argument is required.
Tip: Unless you specify to drop it, the index variable is included in the data set that is being created.

CAUTION:
Avoid changing the index variable within the DO group. If you modify the index variable within the iterative DO group, you may cause infinite looping.  [cautionend]

specification
denotes an expression or a series of expressions in this form

start <TO stop> <BY increment> <WHILE(expression) | UNTIL(expression)>
Requirement: The interative DO statement requires at least one specification argument.
Tip: The order of the optional TO and BY clauses can be reversed.
Tip: When you use more than one specification, each one is evaluated prior to its execution.

start
specifies the initial value of the index variable.
Restriction: When it is used with TO stop or BY increment, start must be a number or an expression that yields a number.
Explanation: When it is used without TO stop or BY increment, the value of start can be a series of items expressed in this form:
item-1 <, . . . item-n >;

The items may be either all numeric or all character constants, or they may be variables. Enclose character constants in quotation marks. The DO group is executed once for each value in the list. If a WHILE condition is added, it applies only to the item that it immediately follows.

The DO group is executed first with index-variable equal to start. The value of start is evaluated before the first execution of the loop.
Featured in: Using Various Forms of the Iterative DO Statement

TO stop
optionally specifies the ending value of the index variable.
Restriction: Stop must be a number or an expression that yields a number.
Explanation: When both start and stop are present, execution continues (based on the value of increment) until the value of index-variable passes the value of stop. When only start and increment are present, execution continues (based on the value of increment) until a statement directs execution out of the loop, or until a WHILE or UNTIL expression that is specified in the DO statement is satisfied. If neither stop nor increment is specified, the group executes according to the value of start. The value of stop is evaluated before the first execution of the loop.
Tip: Any changes to stop made within the DO group do not affect the number of iterations. To stop iteration of a loop before it finishes processing, change the value of index-variable so that it passes the value of stop, or use a LEAVE statement to go to a statement outside the loop.
Featured in: Using Various Forms of the Iterative DO Statement

BY increment
optionally specifies a positive or negative number (or an expression that yields a number) to control the incrementing of index-variable.
Explanation: The value of increment is evaluated prior to the execution of the loop. Any changes to the increment that are made within the DO group do not affect the number of iterations. If no increment is specified, the index variable is increased by 1. When increment is positive, start must be the lower bound and stop, if present, must be the upper bound for the loop. If increment is negative, start must be the upper bound and stop, if present, must be the lower bound for the loop.
Featured in: Using Various Forms of the Iterative DO Statement

WHILE(expression) UNTIL(expression)
optionally evaluates, either before or after execution of the DO group, any SAS expression that you specify. Enclose the expression in parentheses.
Restriction: A WHILE or UNTIL specification affects only the last item in the clause in which it is located.
Explanation: A WHILE expression is evaluated before each execution of the loop, so that the statements inside the group are executed repetitively while the expression is true. An UNTIL expression is evaluated after each execution of the loop, so that the statements inside the group are executed repetitively until the expression is true.
Featured in: Using Various Forms of the Iterative DO Statement
See Also: DO WHILE and DO UNTIL for more information.


Comparisons

There are three other forms of the DO statement:


Examples

Example 1: Using Various Forms of the Iterative DO Statement


Example 2: Using the Iterative DO Statement without Infinite Looping

In each of the following examples, the DO group is executed ten times. The first example demonstrates the preferred approach.

   /* correct coding */
do i=1 to 10;
   ...more SAS statements... 
end;

In the next example, if you do not specify a WHILE or UNTIL clause in the DO statement, infinite looping can occur.

   /* Warning -- infinite looping can occur */
do i=1 to n by m;
   ...more SAS statements... 
   if i=10 then leave;
end;
if i=10 then put 'EXITED LOOP';

This example uses an UNTIL clause to set a flag; then it checks the flag during each iteration of the loop.

flag=0;
do i=1 to 10 until(flag); 
   ...more SAS statements... 
   if expression then flag=1; 
   ...more SAS statements... 
end;

Example 3: Stopping Execution of the DO Loop


See Also

Statements:

ARRAY
Array Reference
DO
DO UNTIL
DO WHILE
GO TO


Chapter Contents

Previous

Next

Top of Page

Copyright 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.