Hi All!
I am very new to regex - I am currently busy with an introductory course. But I have a problem where the regex works when I use it in a grep command, but when I translate it into SAS it doesn't work. Please don't leaugh at the very basic example lol, I have attached the input file and here is my code (extracting all lines that contains exactly 3 digits):
Grep command (returns the correct 3 lines):
grep -E '^[0-9]{3}$' regex18.txt
SAS code (returns 0 rows):
proc import file='/sas/batch/sasdata/users/heididt/regex/ExerciseInputFiles/regex18.txt' out=example replace;
getnames=NO;datarow=1;
run;
data example;
length var2 $8.;
set example;
var2=left(put(var1,8.));
run;
data example_out;
set example;
if prxmatch('/^[0-9]{3}$/',var2);
run;
SAS only has fixed length character variables.
So your test find find 3 digits will not work since instead of three digits you have 3 digits followed by 5 spaces.
You should be able to just add a TRIM() function call.
if prxmatch('/^[0-9]{3}$/',trim(var2));
SAS only has fixed length character variables.
So your test find find 3 digits will not work since instead of three digits you have 3 digits followed by 5 spaces.
You should be able to just add a TRIM() function call.
if prxmatch('/^[0-9]{3}$/',trim(var2));
EXCELLENT - thanks so much!
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 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.
Ready to level-up your skills? Choose your own adventure.