Help using Base SAS procedures

Probel of call execute

Reply
Regular Contributor
Posts: 222

Probel of call execute

Hello everyone,

why It will cause an error in the first data step while the second data step is ok?

Thanks!

Mike

data _null_;
set sashelp.class;
call execute('%global zzz'name';');
run;
%put _user_;

data _null_;
set sashelp.class;
call execute('%global zzz'||name||';');
run;
%put _user_;

PROC Star
Posts: 1,324

Re: Probel of call execute

Posted in reply to Mike_Davis

Hi,

The argument for CALL EXECUTE is a character expression.

In SAS, when you want to build a character expression from text literals and variable values, you use the concatenation operator ( || ) or concatenation functions.

So your first example fails for the same reason that the below fails:

data _null_;
  set sashelp.class;
  a='%global zzz'name';'; 
  put a=;
run;

And below succeeds:

data _null_;
  set sashelp.class;
  a='%global zzz'||name||';';
  put a=;
run;

Does that help?

--Q.

Trusted Advisor
Posts: 1,301

Re: Probel of call execute

Quentin has provided the answer.  Your first method does not create a valid character expression, so it fails.  The being said, when calling macro statements in a data step with call execute I prefer to wrap them with %nrstr so that they will run sequentially after the datastep completes instead of in place.  This is not always important but I find it to be a good practice to follow:

data _null_;

set sashelp.class;

call execute('%nrstr(%global zzz' || name || 'Smiley Wink');

run;

Another way to do this would be using call symputx:

data _null_;

set sashelp.class;

call symputx('zzz'||name,'','g');

run;

Ask a Question
Discussion stats
  • 2 replies
  • 141 views
  • 0 likes
  • 3 in conversation