BookmarkSubscribeRSS Feed
deleted_user
Not applicable
When I tried to invoke the macro function below, it throws an error saying
"%SYSEVALF function has no expression to evaluate...."

%macro concat_ctrl(contstr=,i=);
%do %while(&i < 32);
%let contstr = %sysfunc(cats(&contstr,%sysfunc(byte(&i))));
%put &contstr &i;
%let i=%eval(&i+1);
%end;
%mend concat_ctrl;
%concat_ctrl(contstr=%sysfunc(byte(0)), i=1);

But I am able to invoke the macro function above with difference values as below...

%macro concat_ctrl(contstr=,i=);
%do %while(&i < 72);
%let contstr = %sysfunc(cats(&contstr,%sysfunc(byte(&i))));
%put &contstr &i;
%let i=%eval(&i+1);
%end;
%mend concat_ctrl;
%concat_ctrl(contstr=%sysfunc(byte(65)), i=66);

Could you help me out to overcome this issue?
1 REPLY 1
martha_sas
SAS Employee
I do not have a complete explanation for you, but I believe your problem is that
byte(0) returns null, and sysfunc is getting a string with containing a null.

You can get the same error message submitting these two lines:

%let badstr=%sysfunc(cats(,1));
%put &badstr;

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 1 reply
  • 2018 views
  • 0 likes
  • 2 in conversation