我写
做 while (A<=B<=C);...;end
我没有得到我所期望的(即A<=B 和 B<=C)。那么 SAS 是如何解释表达式 A<=B<=C 的呢?注意:SAS 没有给出 A<=B<=C 的错误。
我写
做 while (A<=B<=C);...;end
我没有得到我所期望的(即A<=B 和 B<=C)。那么 SAS 是如何解释表达式 A<=B<=C 的呢?注意:SAS 没有给出 A<=B<=C 的错误。
我相信它从左到右评估:
(A <= B) <= C
A <= B
评估为0
或1
。然后将该值与 进行比较C
。
这正如您在数据步骤中所期望的那样工作。它在 PROC IML 中不起作用。
1189 data _null_;
1190 a = 10;
1191 b = 10;
1192 c = 15;
1193
1194 do while(a<=b<=c);
1195 put b=;
1196 b = b + 1;
1197 /*Abort if this runs away*/
1198 if b > 20 then
1199 stop;
1200 end;
1201 run;
b=10
b=11
b=12
b=13
b=14
b=15
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
1203 proc iml;
NOTE: IML Ready
1204 a = 10;
1205 b = 10;
1206 c = 15;
1207 file log;
1208
1209 do while (a<=b<=c);
1210 put "B=" b;
1211 b = b+1;
1212
1213 if b>20 then stop;
1214 end;
B= 10
B= 11
B= 12
B= 13
B= 14
B= 15
B= 16
B= 17
B= 18
B= 19
B= 20
1215 quit;
NOTE: Exiting IML.
NOTE: PROCEDURE IML used (Total process time):
real time 0.00 seconds
cpu time 0.01 seconds
IML 的逻辑语法与 Base SAS 略有不同。在 IML 中,使用
do while ( (a<=b) & (b<=c));