I'm hoping for some help in understanding the results I'm getting in the following code.
%let test =;
%put test has a word count of %sysfunc(countw(test));
In the case of an empty macro variable, countw returns a value of 1. I'd like the result to be 0 in this case, which seems like it should be the result, but I'm clearly missing something in the documentation. Is there a way to have this return 0 by using some combination of optional arguments? If so, what would that be?
Thanks.
It is problem with the way that %SYSFUNC() parses and passes the arguments to the function.
You could either test first or just append a space (or whatever you delimiter is) to the end of the argument.
%put %sysfunc(countw(&test%str( )));
I think you might want to use
%put test has a word count of %sysfunc(countw(&test));
And furthermore, you might want to perform a test of &test to make sure it isn't an empty string, which it is in your example. If its an empty string, you can return a value of 0 and branch around the actual use of countw
My apologies. Leaving out the ampersand was a typo.
I'm actually trying to have countw return 0 when the string is empty. It seems like that should be the result.
It is problem with the way that %SYSFUNC() parses and passes the arguments to the function.
You could either test first or just append a space (or whatever you delimiter is) to the end of the argument.
%put %sysfunc(countw(&test%str( )));
Thank you Tom.
That is weird. I got ERROR info running your code .
%let test =;
%put test has a word count of %sysfunc(countw(%bquote(&test)));
test has a word count of 0
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 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.