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
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.