Hi everyone,
I was given a dataset with first name and last name variables and asked to concatonate these and then order the full name alphabetically. I have managed to concatonate the names but I am struggling to order the full name. Hopefully the example below will clear things up.
Data I had:
fname sname
Jim Smith
Tom Bell
Data currently:
fullname
JimSmith
TomBell
Data I need:
fullname2
hiiJmmSt
BellmoT
Apologies if this has been answered but I have not found anything on my searches!
Thanks in advance
Data currently;
input fullname $20.;
datalines;
JimSmith
TomBell
;
data want;
set currently;
array t(50) $ _temporary_;
call missing(of t(*));
do _n_=1 to length(strip(fullname));
t(_n_)=lowcase(char(fullname,_n_));
end;call sortc(of t(*));newname=cats(of t(*));run;
data matching with another work data set.
Hmm. "Tim Mott" and "Tom Mitt" will not match in name form, but will match in sorted anagram form. That could be interesting.
@skibur I think your question has been answered. Please close the thread. It's way too simple question
Using compress with the whole alphabet at the first argument, your text as second argument, and 'k' modifier to keep letters for the alphabet as they appear.
data test;
input fname $ sname $ ;
datalines;
John Smith
Tom Bell
;
data test;
set test;
fullname = cats(fname, sname);
fullname2 = compress('AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz', fullname, 'k');
run;
@bodowd wrote:
Using compress with the whole alphabet at the first argument, your text as second argument, and 'k' modifier to keep letters for the alphabet as they appear.
data test; input fname $ sname $ ; datalines; John Smith Tom Bell ; data test; set test; fullname = cats(fname, sname); fullname2 = compress('AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz', fullname, 'k'); run;
@bodowd : Very nice, because you can trivially change the desired order of characters in the result:
data test;
set test;
fullname = cats(fname, sname);
fullname2 = compress('AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz', fullname, 'k');
fullname3 = compress('ZzYyXxWwVvUuTtSsRrQqPpOoNnMmLlKkJjIiHhGgFfEeDdCcBbAa', fullname, 'k');
run;
But be careful - In the absence of a LENGTH declaration, the resulting FULLNAME2 and 3 lengths are determined by the first argument of the compress function - i.e. length 52 in this case.
Also, letters that appear more than once in the original, appear only once in the result.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.