在SAS Do循环中指定输出语句时,为什么索引变量的存储值不同?

时间:2014-12-24 11:30:22

标签: sas output do-loops

  1. 在数据集Work.Invest中,Year的存储值是什么?

    数据工作.invest;      做年= 1990年至2004年;       资本+ 5000;       资本+(资本* 0.10);      结束;    运行;

    • 一个。缺少
    • 湾1990年
    • ℃。 2004年
    • d。 2005
  2. SAS基础准备指南中给出的正确答案是 d.2005

    1. 在下面的问题中,储值为2004年。 关于下面显示的程序,以下哪项陈述是错误的?

      数据工作.invest;   做年= 1990年至2004年;     资本+ 5000;     资本+(资本* 0.10);     输出;   结束; 运行;

      • 一个。 OUTPUT语句将当前值写入数据集 立即
      • 湾Year的存储值是2005年。
      • ℃。 OUTPUT语句会覆盖结尾处的自动输出 DATA步骤。
      • d。 DO loop执行15次迭代。
    2. 对此的正确答案是 b.2005。(确定错误陈述是问题)。

3 个答案:

答案 0 :(得分:5)

关键概念:

  • 计数器在循环的END处递增。
  • OUTPUT语句在数据步骤结束时覆盖隐式输出并写入 所有变量到数据集的当前状态。

在第一个问题中,这意味着在循环结束时,它递增到2005,转到DO语句并说STOP,因为不满足DO条件。在数据步骤结束时,使用计数器在Year = 2005生成输出。

在第二个问题中,因为OUTPUT语句在计数器结束之前,因此值输出为Year = 2004。此外,输出语句将为Year的每个值生成一行,以便存储的值为'这不是一个好问题,因为在输出数据集中会有Year = 1990到2004的行。

答案 1 :(得分:0)

如SAS手册http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000194540.htm

中所述
  

然而,一旦使用OUTPUT语句将观察值写入任何一个数据集,DATA步骤结束时就没有隐式的OUTPUT语句

因此,第一个示例中的year = 2005,第二个示例中的max(year)= 2004。

答案 2 :(得分:0)

您首先编码,

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

工作原理

  1. 变量"年"在循环语句的执行结束后,每次都会增加

  2. 在最后一步中,即year = 2004时,do循环中的两个语句将被执行,现在年份值将增加到year = 2005。但是这个值2005不会满足循环条件。因此do循环的执行结束了。

  3. SAS现在到达数据步骤的末尾(没有其他语句可以执行)。现在IMPLICIT输出语句将被执行。

  4. 我们这里有两个变量"年"和"资本"。具有最新值的这两个变量都将写入数据集

  5. 年度最新值是2005年。

    <强>结果:

    年资本

    2005 174748.6493

    现在是您的第二个代码,

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

    注意事项: 如果给出了EXPLICIT输出语句,SAS将不执行IMPLICIT输出。

    工作原理

    1. 变量&#34;年&#34;在循环语句的执行结束后,每次都会增加

    2. 在第二行&#34;资本+(资本* .10)之后;&#34; IMPLICIT输出语句将被执行。因此我们将得到15个观察

    3. 在最后一步中,即year = 2004时,do循环+输出语句中的两个语句将被执行,现在年份值将增加到year = 2005。但是这个值2005不会满足循环条件。因此do循环的执行结束了。

    4. 由于存在EXPLICIT输出语句,SAS不会再输出(IMPLICIT)

    5. <强>结果:

      年资本

      1990 5500

      .....

      2003 153862.4085

      2004 174748.6493