Why do we need to use sysfunc when we call a SAS function inside a SAS macro

I saw this piece of code in my project:

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

Why could not I write:

%let x= %trim(num);

Why did I need to use sysfunc?

Under what circumstances can I call a function inside a macro without using sysfunc?

Topic sas

Category Data Science


The trim() function is part of the SAS Language. Without the %sysfunc() macro function, trim() can only be used within a data step or in a macro definition that gets called inside of a data step. You can't have it out in open code.

if %trim() existed, which it does not, it would work just fine the way you used it. But, there is no function named %trim() that is defined in the SAS macro language.

Doing what you want without %sysfunc(), would have to go something like:

data _NULL_;
    call symput("x", trim("&num."));
run;

or if you want x to be a data set variable:

%let expr= trim("&num.");

DATA ds;
    x = &expr.;
RUN;

Without the sysfunc(), the expression will not be evaluated. You will not be assigning the value of the expression trim(&num) to the macrovariable, but rather the whole expression.

If you want to store the result of an expression, you need to execute that function with sysfunc()

http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#z3514sysfunc.htm

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.