@PhilC,
I think that FINDW might work better.
With FINDW, you don't need MINOPERATOR or MINDELIMITER anymore.
An interesting thing that I sometimes do in macros is to assign a default while still allowing for positional parameters:
%let _=; /*@jimbarbour*/
&_ %macro _ValidateCountry
(countrym /* Choose SE, DK, NO or FI. */
,countrylistm /* A used defined list contaning a combination of SE, DK, NO, FI. */
);
/* %PUT &Nte1 &=countrym &=countrylistm;*/
%IF %BQUOTE() = %BQUOTE(&CountryListM) %THEN
%LET CountryListM = SE DK NO FI;
/* %PUT &Nte1 &=countrym &=countrylistm;*/
%eval(%sysfunc(findw(&countrylistm,&countrym,,SI)) > 0);
%MEND;
OPTIONS NOSOURCE;
%put NOTE: %_ValidateCountry(SE, SE NO) ;
%put NOTE- %_ValidateCountry(nO, sE NO Fi);
%put NOTE- %_ValidateCountry(SE, SE USA);
%put NOTE- %_ValidateCountry(,se no);
%put NOTE- %_ValidateCountry(se , );
%put NOTE- %_ValidateCountry( , NE);
%put NOTE- %_ValidateCountry(NO , NE);
%put NOTE- %_ValidateCountry(o , );
OPTIONS SOURCE;
In the above, the first %BQUOTE is not really necessary, but sometimes is helpful to me just in terms of readability. The second %BQUOTE is actually doing something. Try running the code with and without the %BQUOTE, but uncomment the %PUT
%PUT &Nte1 &=countrym &=countrylistm;
before and after the %IF statement and run with parameters (NO, NE)
%put NOTE- %_ValidateCountry(NO , NE);
Jim
... View more