1

我写

做 while (A<=B<=C);...;end

我没有得到我所期望的(即A<=B 和 B<=C)。那么 SAS 是如何解释表达式 A<=B<=C 的呢?注意:SAS 没有给出 A<=B<=C 的错误。

4

2 回答 2

3

我相信它从左到右评估:

(A <= B) <= C

A <= B评估为01。然后将该值与 进行比较C

于 2013-08-30T15:11:00.507 回答
2

这正如您在数据步骤中所期望的那样工作。它在 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));
于 2013-08-30T22:28:24.587 回答