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*$
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.