为什么我们在 SAS 宏中调用 SAS 函数时需要使用 sysfunc

数据挖掘 sas
2022-03-06 17:52:09

我在我的项目中看到了这段代码:

%let num = test;
%let x=%sysfunc(trim(&num));

为什么我不能写:

%let x= %trim(&num);

为什么我需要使用 sysfunc?

在什么情况下可以不使用 sysfunc 在宏内部调用函数?

2个回答

如果没有 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;