Nesting DO Loops

Indenting and Nesting DO Groups

You can nest DO groups to any level, just like you nest IF-THEN/ELSE statements.
Note: The memory capabilities of your system might limit the number of nested DO statements that you can use.
Here is an example structure of nested DO groups:
do;
	...more SAS statements...;
		do;
			...more SAS statements...;
				do;
					...more SAS statements...;
				end;
		end;
end;
Tip
It is good practice to indent the statements in DO groups, as shown in the preceding statements, so that their position indicates the levels of nesting.

Examples: Nesting DO Loops

Iterative DO statements can be executed within a DO loop. Putting a DO loop within a DO loop is called nesting.
do i=1 to 20; 
   ...more SAS statements... 
   do j=1 to 10; 
      ...more SAS statements... 
   end; 
   ...more SAS statements... 
end;
The DATA step below computes the value of a one-year investment that earns 7.5% annual interest, compounded monthly.
data work.earn; 
  Capital=2000; 
  do month=1 to 12; 
    Interest=capital*(.075/12); 
    capital+interest; 
  end; 
run;
Assume that the same amount of capital is to be added to the investment each year for 20 years. The new program must perform the calculation for each month during each of the 20 years. To do this, you can include the monthly calculations within another DO loop that executes 20 times.
data work.earn; 
  do year=1 to 20; 
    Capital+2000; 
      do month=1 to 12; 
        Interest=capital*(.075/12); 
        capital+interest;  
      end;  
  end;  
run;
During each iteration of the outside DO loop, an additional 2,000 is added to the capital, and the nested DO loop executes 12 times.
data work.earn; 
  do year=1 to 20; 
    Capital+2000; 
      do month=1 to 12;  
        Interest=capital*(.075/12);  
        capital+interest; 
      end; 
  end; 
run;
Remember, in order for nested DO loops to execute correctly, you must do the following:
  • Assign a unique index-variable name in each iterative DO statement.
    data work.earn; 
      do year=1 to 20; 
        Capital+2000; 
          do month=1 to 12; 
            Interest=capital*(.075/12); 
            capital+interest; 
          end; 
      end; 
    run;
  • End each DO loop with an END statement.
    data work.earn; 
      do year=1 to 20;
        Capital+2000; 
          do month=1 to 12; 
            Interest=capital*(.075/12); 
            capital+interest; 
          end; 
      end; 
    run;
It is easier to manage nested DO loops if you indent the statements in each DO loop as shown above.
Last updated: August 23, 2018
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.223.195.29