我在我的项目中看到了这段代码:
%let num = test;
%let x=%sysfunc(trim(&num));
为什么我不能写:
%let x= %trim(&num);
为什么我需要使用 sysfunc?
在什么情况下可以不使用 sysfunc 在宏内部调用函数?
我在我的项目中看到了这段代码:
%let num = test;
%let x=%sysfunc(trim(&num));
为什么我不能写:
%let x= %trim(&num);
为什么我需要使用 sysfunc?
在什么情况下可以不使用 sysfunc 在宏内部调用函数?
如果没有 sysfunc(),表达式将不会被计算。您不会将表达式 trim(&num) 的值分配给宏变量,而是整个表达式。
如果要存储表达式的结果,则需要使用 sysfunc() 执行该函数
http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#z3514sysfunc.htm
该trim()函数是SAS 语言的一部分。如果没有%sysfunc() 宏功能,trim()只能在数据步骤内或在数据步骤内调用的宏定义中使用。你不能用开放代码把它拿出来。
如果%trim()存在,它不存在,它会按照您使用它的方式正常工作。但是,没有%trim()在 SAS 宏语言中定义的命名函数。
在没有 的情况下做你想做%sysfunc()的事,必须这样做:
data _NULL_;
call symput("x", trim("&num."));
run;
或者,如果您想x成为数据集变量:
%let expr= trim("&num.");
DATA ds;
x = &expr.;
RUN;