Nested Loop in Stata

Nested loops, double loop, multiple loop and loop within a loop, all refer to the same thing. Nested loops are a good way to tackle multiple tasks systematically. To work with Nested loops, we would need to have an understanding of both the ‘forvalues’ loop and the ‘foreach’ loop.

Nested loops involve having one loop inside another loop. To put it simply, we can see them as tasks within tasks, just like how you have main tasks list and inside it, you have a smaller list of sub-tasks. These nested loops are sometimes referred to as double loops or multiple loops. Nested Loops in Stata are a little complicated, but they can be broken down to grasp through some tricks.

To jog our memory, let’s quickly review the ‘forvalues’ loop in Stata. The basic syntax is to use a variable name (often represented by `i`) that helps the iteration through a specified range of values. For instance, if we are dealing with a range of years from 2001 to 2010, we can use the ‘display’ command to display the combination of the word “year” and the corresponding year value. Our command for this action would look something like this,

forvalues i=2001/2010 {
    display "year " `i'

Although we are using the ‘display’ command to explain this concept better, we can still substitute it with any command that aligns with our specific goals including, but not limited to, summarize command.

Now, let us move on to the concept of nested loops. Imagine we have a range of years from 2001 to 2010, and for each year, we want to perform an analysis across all 12 months of each year. This would seemingly require a total of 120 commands to execute. However, instead of writing each of the 120 commands individually, we can utilize nested loops.

Here’s how it works: Inside the outer ‘forvalues’ loop that is responsible for iterating through the years, we place another ‘forvalues’ loop. This inner loop pertains to the time for the months from 1 to 12. Within the nested loops, we can use the ‘display’ command to generate an output that displaces both the year and the month. By nesting these loops, we are effectively combining and merging the year loop with the month loop, generating all possible year-month combinations. The command for this action should be,

forvalues i=2001/2010 {
   forvalues m=1/12 {
      display "year " `i' " month " `m'

As we execute the nested loop code, you’ll see a series of outputs. Each output will show the year that spans from 2001 to 2010 along with the respective month, ranging from 1 to 12. The spaces we insert before and after words like “year” and “month” are for readability purposes, making the output more user-friendly.

Nevertheless, it is worth remembering that nested loops are a powerful tool, but they can become complex and intricate as tasks pile up. It’s important to use them wisely and carefully and consider alternative methods when they prove to be more efficient. Happy learning!

Notify of
Inline Feedbacks
View all comments
Would love your thoughts, please comment.x