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!
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.