10-13-2014 07:19 PM
%let varlist1 =a b c d e f;
%let varlist2 = c d e;
How to use macro or function to test if var in varlist2 are in varlist1?
Say, I can use %scan() function and do loop to test, but I don't know if there is a macor counterpart of 'in' of sas base?
e.g, "%scan(&varlist2,1)" in &varlist1, but in SAS base, &varlist1 should be quoted for each element of &varlist2, how can I make it quoted so that I can use SAS base in operator?
Or alternatively is there other way to achieve this without sas base 'in' operator?
10-13-2014 08:18 PM
Do you want to test each value in VARLIST2 are in VARLIST1?
%do i=1 %to %sysfunc(countw(&varlist2)) ;
%if %sysfunc(indexw(&varlist1,%scan(&varlist1,&i))) %then %let found=1;
10-13-2014 08:22 PM
If you have 9.2 onwards you can using the IN operator.
I have an older version so the following has not been tested.
%LET VARLIST1 = A B C D E F;
%LET VARLIST2 = C D E;
%DO I = 1 %TO %LENGTH(%SYSFUNC(COMPRESS(&VARLIST2.)));
%IF %SCAN(&VARLIST2,&I.) IN &VARLIST1. %THEN %DO
%LET EXIST&I. = Y;
10-14-2014 09:02 AM
Does the order matter ?
%LET VARLIST1 = A B C D E F; %LET VARLIST2 = C D E; data _null_; if find(symget('VARLIST1'),symget('VARLIST2')) then putlog "Found" ; else putlog "Not Found"; stop; run;