How does one identify 0 or more spaces? I thought that the following would work, but it fails for the 2nd record ("Jones, Fred") because the , and F are separated by two spaces. It works for all of the other records.
data ReversedNames;
input name & $32.;
datalines;
Smith,Tom
Jones, Fred
Kavich, Kate
Turley, Ron
Dulix, Yolanda
;
/* Reverse last and first names with a DATA step. */
data names;
set ReversedNames;
name = prxchange('s/(\w+),\s*(\w+)/$2 $1/', -1, name);
run;
Art,
There is no issue with your regular expression. The issue is with your reading of the ReversedNames cards. & will only move past the first space with list input.
filename ft15f001 temp;
data ReversedNames;
length name $ 32;
infile ft15f001 length=len;
input @1 name $varying. len;
list;
parmcards;
Smith,Tom
Jones, Fred
Kavich, Kate
Turley, Ron
Dulix, Yolanda
;
Art,
There is no issue with your regular expression. The issue is with your reading of the ReversedNames cards. & will only move past the first space with list input.
filename ft15f001 temp;
data ReversedNames;
length name $ 32;
infile ft15f001 length=len;
input @1 name $varying. len;
list;
parmcards;
Smith,Tom
Jones, Fred
Kavich, Kate
Turley, Ron
Dulix, Yolanda
;
Matt,
Thanks! While I've obviously forgotten things I know, at least I'm FINALLY getting around to learning at least a little about regular expressions!
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.