You can cobble together some string functions, primarily, SUBSTR(), PROPCASE() and UPCASE().
This would be a brute force method.
data want;
input word $;
word2 = catt(propcase(substr(word, 1, length(word)-1)),
upcase(substr(word, length(word), 1)));
cards;
word
random
mIxed
CASE
WORDS
;
run;
proc print;run;
Is your actual data going to contain any spaces imbedded?
Or harness the power of regular expressions:
data have;
length str $40;
input str &;
cards;
word
random
mIxed
CASE
WORDS
Whole string of words.
a ab abc abc-def
;
data want;
if not prx1 then prx1 + prxParse("s/\b(\w?)(\w*)(\w)\b/\u\1\L\2\E\u\3/");
set have;
length StrinG $40;
StrinG = prxChange(prx1, -1, str);
drop prx1;
run;
proc sql; select * from want; quit;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.