我有一個SAS無法正常工作的宏。如果宏變量的值大於某個固定值,我會觸發%goto語句。宏變量由以下示例代碼創建;SAS宏變量與科學計數法的邏輯比較
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宏只會生成更多文本。 – david25272