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.
我想了解这个 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.