BookmarkSubscribeRSS Feed
Abhinav26
Obsidian | Level 7

Getting below error, need a way in order to successfully compress spaces from the string: '0189416','189416','00189416','000189416'.

 

 

call symput ('POL_NBR1',compress(&POL_NBR.,'0123456789'));

SYMBOLGEN: Macro variable POL_NBR resolves to '0189416','189416','00189416','000189416'
________
72
ERROR 72-185: The COMPRESS function call has too many arguments.

4 REPLIES 4
Kurt_Bremser
Super User

When the macro variable is resolved, the following statement is handed to the SAS interpreter:

call symput ('POL_NBR1',compress('0189416','189416','00189416','000189416','0123456789'));

You can see that you have 5 arguments for compress(), which only expects 3 arguments at most.

You can enclose your macr variable in double quotes:

%let pol_nbr='0189416','189416','00189416','000189416';

data _null_;
call symput ('POL_NBR1',compress("&POL_NBR.",'0123456789'));
run;

%put pol_nbr1=&pol_nbr1.;

which leaves you with a sequence of empty strings:

43         %put pol_nbr1=&pol_nbr1.;
pol_nbr1='','','',''

 

Abhinav26
Obsidian | Level 7

That worked 🙂 but while using this resolved value in my code, i am not getting the results although it shows it's resolving fine. Here's what i am getting in the log:

 

where
/* and cov.pol_nbr in('0189416','189416','00189416','000189416')*/

and (cov.pol_nbr in

SYMBOLGEN: Macro variable POL_NBR1 resolves to '0189416','189416','00189416','000189416'
119 ! (&POL_NBR1.))

 

but when i am including the above commented piece of code, I am able to get the results.

Why is it so ?

Kurt_Bremser
Super User

Please post the whole log of the step that gives you issues. Use the {i} button for posting logs, to prevent any reformatting or character substitution by the forum software.

Astounding
PROC Star

On the surface of things, it looks a little odd that you want to remove spaces from a string that doesn't contain any space.  But assuming your description of the problem is correct, this statement is obviously not working:

 

call symput ('POL_NBR1',compress(&POL_NBR.,'0123456789'));

 

The good news:  the solution is even simpler:

 

call symput ('POL_NBR1',compress("&POL_NBR."'));

 

With no additional arguments, COMPRESS removes all spaces.

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
  • 4 replies
  • 1860 views
  • 0 likes
  • 3 in conversation