I don't think the functionality of the "$" symbol in regular expressions works in SAS. The code I'm using:
data foo;
input a :$1024.;
datalines;
foobar
barfoo
food
westchester
freebeer
;
run;
proc sql;
create table test as
select *
from foo
where prxmatch('m/^f.*r$/i', a);
quit;
I expect test to return "foobar" and "freebeer" however it returns an empty set.
OK, that seems to work. I'm a bit confused about the syntax here. I thought adding the ":" made the data type like a vary character with a maximum of 1024?
Also when I use this code:
proc sql;
create table test as
select length(a)
from foo;
quit;
I don't see length of any additional whitespace added.
When using this code:
proc sql;
create table test as
select put(a, $hex16.)
from foo;
quit;
I see the ASCII symbol for a space. I take it SAS doesn't count white space in the length calculation?
As documented the SAS function LENGTH() returns the length of a string up to the last non-blank character. In SAS Foundation version 9.x all character variables are of type CHAR. VARCHAR doesn't exist. That's why you've got most of the time trailing blanks.
For RegEx: Either TRIM() or STRIP() the variable or then add the potential trailing blanks to your RegEx using \s*$
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.