Search code examples
sasoutputdo-loops

When the output statement is specified in the SAS Do loop, why does the stored value for index variable differ?


  1. In the data set Work.Invest, what would be the stored value for Year?

    data work.invest; do year=1990 to 2004; capital+5000; capital+(capital*.10); end; run;

    • a. missing
    • b. 1990
    • c. 2004
    • d. 2005

The correct ans given in the SAS base prep guide is d.2005.

  1. In the below question the stored value is given as 2004. Which of the following statements is false regarding the program shown below?

    data work.invest; do year=1990 to 2004; capital+5000; capital+(capital*.10); output; end; run;

    • a. The OUTPUT statement writes current values to the data set immediately.
    • b. The stored value for Year is 2005.
    • c. The OUTPUT statement overrides the automatic output at the end of the DATA step.
    • d. The DO loop performs 15 iterations.

The correct answer for this is b.2005. (identify the false statement is the question).


Solution

  • Key concepts:

    • The counter increments at the END of the loop.
    • The OUTPUT statement overrides implicit output at end of the data step and writes the current status of all variables to the data set.

    In the first question, that means at the end of the loop, it increments to 2005, goes to the DO statement and says STOP because the DO condition is not met. At the end of the data step the output is generated with the counter at Year=2005.

    In the second question because the OUTPUT statement is before the end of the counter so the value output is Year=2004. Additionally the output statement will generate a row for each value of Year, such that the 'stored value' isn't a good question because there will be rows of Year=1990 to 2004 in the output data set.