SAS 做循环输出

SAS DO LOOP OUTPUT

我想了解这个 SAS 问题以及输出语句在此处的工作原理。问题是问 i 和 x 的值是多少。

但是当我添加一个输出语句时,它显示了 3 个观察值 x 1,3,5 和 i 1,3,5。

(我一直认为输出语句是写入当前值,但我不确定这里是什么意思)

这是它给出的代码和解释,


data new;
x = 0;
do i = 1 to 5 by 2;
x = i;
end;
run;

Answer

x=5 i=7

Step check

1. x=0, i=1
2. x=1, i=3
3. x=3  i=5
4  x=5  i=7

循环正确。当值为 7 时,DO 循环终止。 所以在循环的最后一次迭代中,i=5,然后它在 DO 语句中递增,意识到它已经超过了循环的间隔,然后终止。 X 仍然是 5,因为从未进入循环,但 i 是 7。

如果加上OUTPUT语句,注意复数,就可以看到了。 请注意,我在日志中使用了 PUT 以使输出更易于阅读。

data new;
    x=0;

    do i=1 to 5 by 2;
        x=i;
        output;
    end;
    output;
run;

输出:

 69         data new;
 70         file log dsd;
 71         x = 0;
 72         do i = 1 to 5 by 2;
 73         x = i;
 74         put _all_;
 75         end;
 76         put _all_;
 77         run;

 x=1 i=1 _ERROR_=0 _N_=1
 x=3 i=3 _ERROR_=0 _N_=1
 x=5 i=5 _ERROR_=0 _N_=1
 x=5 i=7 _ERROR_=0 _N_=1

不确定该问题的底部在尝试什么 show/ask。但是,如果您添加一些 PUT 语句和 运行 代码,您可以看到值是如何变化的。

2511  data new;
2512  putlog 'Loc 1 ' x= i=;
2513  x = 0;
2514  putlog 'Loc 2 ' x= i=;
2515  do i = 1 to 5 by 2;
2516  putlog 'Loc 3 ' x= i=;
2517  x = i;
2518  putlog 'Loc 4 ' x= i=;
2519  end;
2520  putlog 'Loc 5 ' x= i=;
2521  run;

Loc 1 x=. i=.
Loc 2 x=0 i=.
Loc 3 x=0 i=1
Loc 4 x=1 i=1
Loc 3 x=1 i=3
Loc 4 x=3 i=3
Loc 3 x=3 i=5
Loc 4 x=5 i=5
Loc 5 x=5 i=7
NOTE: The data set WORK.NEW has 1 observations and 2 variables.