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_;
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.
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 || ';)');
run;
Another way to do this would be using call symputx:
data _null_;
set sashelp.class;
call symputx('zzz'||name,'','g');
run;
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.