Использование% eval достаточно, если вам требуется только целочисленная арифметика. Если вам нужно выполнить арифметику с плавающей запятой с макропеременными, вы должны использовать вместо этого% sysevalf.
Большинство функций шага данных могут быть применены непосредственно к макропеременным одним из двух способов:
1. %function()
2. %sysfunc(function())
Для многих наиболее часто используемых функций существуют точные макроэквиваленты, и все, что вам нужно сделать, это добавить% перед именем функции. Функции, которые не имеют точных макроэквивалентов, обычно можно заставить принимать макропеременные, вызывая их внутри% sysfunc (). N.B. функции шага данных, которые обычно ожидают строку, заключенную в одинарные кавычки, потерпят неудачу при вызове фрагмента макрокода через% sysfunc (), если вы не удалите кавычки. Э.Г.
data _null_;
x = rand('uniform');
run;
отлично работает на шаге данных, но чтобы дать макропеременной то же значение в куске макрокода, вам нужно будет использовать
%let x = %sysfunc(rand(uniform));
Это связано с тем, что в макросреде SAS интерпретирует текст iform как строку, тогда как на шаге данных SAS интерпретирует текст без кавычек как имя переменной.