If statement 如何强制SAS在if条件下将宏变量解释为数字
SAS将以下if声明中的年内公差和abs成本解释为文本变量。因此,if语句测试的是变量的字母顺序,而不是数字顺序。如何让SAS将其视为数字?我已经尝试在%sysevalf中粘贴if条件和宏变量,但没有任何区别。年内公差为10000000,成本可能会有所不同,但在测试运行中,大约从20000000开始,然后降至9000000,此时应退出循环,但不会If statement 如何强制SAS在if条件下将宏变量解释为数字,if-statement,sas,If Statement,Sas,SAS将以下if声明中的年内公差和abs成本解释为文本变量。因此,if语句测试的是变量的字母顺序,而不是数字顺序。如何让SAS将其视为数字?我已经尝试在%sysevalf中粘贴if条件和宏变量,但没有任何区别。年内公差为10000000,成本可能会有所不同,但在测试运行中,大约从20000000开始,然后降至9000000,此时应退出循环,但不会 %macro set_downward_caps(year, in_year_tolerance, large, small, start, end,
%macro set_downward_caps(year, in_year_tolerance, large, small, start, end, increment);
%do c = &start. %to &end. %by &increment.;
%let nominal_down_large_&year. = %sysevalf(&large. + (&c. / 1000));
%let nominal_down_small_&year. = %sysevalf(&small. + (&c. / 100));
%let real_down_large_&year. = %sysevalf((1 - &&nominal_down_large_&year.) * &&rpi&year.);
%let real_down_small_&year. = %sysevalf((1 - &&nominal_down_small_&year.) * &&rpi&year.);
%rates(&year.);
proc means data = output.s_&scenario. noprint nway;
var transbill&year.;
output out = temporary (drop = _type_ _freq_) sum=cost;
run;
data _null_;
set temporary;
call symputx('cost', put(cost,best32.));
run;
data temp;
length scenario $ 30;
scenario = "&scenario.";
large = &&real_down_large_&year.;
small = &&real_down_small_&year.;
cost = &cost.;
run;
data output.summary_of_caps;
set output.summary_of_caps temp;
run;
%let abs_cost = %sysevalf(%sysfunc(abs(&cost)));
%if &in_year_tolerance. > &abs_cost. %then %return;
%end;
%mend set_downward_caps;
使用%sysevalf(&in_year\u tolerance>&abs\u cost,boolean)
正如您所看到的,比较是基于文本的。如果将其放入%eval()
或%sysevalf()
中,这些值将被解释为数字
,boolean
选项让它知道您想要的是真/假