- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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.
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
This is because of trailing spaces :
prxmatch('m/^f.*r$/i', strip(a))
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
This is because of trailing spaces :
prxmatch('m/^f.*r$/i', strip(a))
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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*$