I have a query like so:
proc sql;
create table test_query as
select *
from lib.dataset
where something = 1
and (description contains ("ABC")
or description contains ("DEF")
or description contains ("GHI")
or description contains ("JKL")
or description contains ("MNO")
or description contains ("PQR"))
;
quit;
Is there a way to do something like "description LIKE IN ('%ABC%', '%DEF%', '%GHI%', ...)' that would avoid costly ORs within the query? Or something more efficient that I'm not thinking of?
How about PRXMATCH() ?
proc print data=sashelp.class;
where prxmatch('/B|M/i',name);
run;
Obs Name Sex Age Height Weight 3 Barbara F 13 65.3 98 6 James M 12 57.3 83 14 Mary F 15 66.5 112 16 Robert M 12 64.8 128 18 Thomas M 11 57.5 85 19 William M 15 66.5 112
How about PRXMATCH() ?
proc print data=sashelp.class;
where prxmatch('/B|M/i',name);
run;
Obs Name Sex Age Height Weight 3 Barbara F 13 65.3 98 6 James M 12 57.3 83 14 Mary F 15 66.5 112 16 Robert M 12 64.8 128 18 Thomas M 11 57.5 85 19 William M 15 66.5 112
Thanks, @Tom! I can't believe I didn't think of regexes.
Interestingly, the performance didn't seem much better, a sign that maybe the original filters aren't so bad.
But this definitely cleans-up the code quite a bit & gives more flexibility for automated query construction.
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.