【发布时间】:2017-07-27 16:24:23
【问题描述】:
我在 SAS 中有一个无法正常工作的宏。我有一个 %goto 语句,如果宏变量的值大于某个固定数字,则会触发该语句。宏变量由以下示例代码创建;
proc sql noprint;
select num into :num
from table;
quit;
打开表格时,num 变量具有标准表示法的数字(例如 645,435,243)。但是,宏变量 &num。将其选为 6.4544E8。当 SAS 尝试将此值与诸如 1,000,000 之类的数字进行比较时,这会导致问题。
我能够使用下面的简单宏重新创建此问题,唯一的区别在于宏变量被赋值的方式。在下面的代码中,我直接赋值 j 1E8 而不是通过 proc sql 语句。
我的问题是:为什么 SAS 无法正确评估 1E8 > 5?
%macro test();
%let i = 1;
%let j = 1E8;
data test0;
x = &i.;
output;
run;
%let i = 2;
%do %until (&i. = 11);
%put &i.;
%if &i. >= 7 %then %do;
%if &j. > 5 %then %do;
%goto done;
%end;
%end;
data test&i.;
x = &i.;
output;
run;
proc append base=test0 data=test&i.;
run;
proc datasets library=work nolist;
delete test&i.;
run;
%let i = %eval(&i + 1);
%end;
%done: %mend;
%test();
【问题讨论】:
-
SAS 宏变量只是文本。 SAS 宏只是生成更多文本。