Hi,
Im trying to keep the last letter of a text string that has various lengths in order to create a new variable.
The example is below
Datalines
abcdefg
abcdef
abbbbbnn
dddeeegg
Results
g
f
n
g
So all i need is just the last character.
Thanks!
Ryan
Always nice to have choices:
data want;
set have;
length result $ 1;
result = left(reverse(text));
run;
data want;
set have;
result=substr(text,length(strip(text))-1,1);
run;
Thanks for your quick response, very much appreciated
Always nice to have choices:
data want;
set have;
length result $ 1;
result = left(reverse(text));
run;
Thanks for the speedy response!
Gosh you folks are fast...
From Cody's SAS Functions by Example:
data have;
infile datalines4;
input charvar1 $;
list;
LastChar = substr(charvar1,length(charvar1),1);
datalines4;
abcdefg
abcdef
abbbbbnn
dddeeegg
;;;;
run;
A couple of hidden "features" here ...
Note that LENGTH never returns 0. If the incoming string is blank, it returns 1 so the second argument to SUBSTR will still be valid.
Also note that the LENGTH statement should be added. When SUBSTR creates a new variable, the length will not be $1, but will be the length of the original string. You can easily see that by running a PROC CONTENTS.
Another way:
data have;
infile datalines4;
input charvar1 $ 8.;
lastchar=prxchange('s/(.+)([a-zA-Z])$/$2/o', -1, trim(charvar1));
datalines4;
abcdefg
abcdef
abbbbbnn
dddeeegg
h
;;;;
run;
Let me count the ways...the number on the end of the REVERS format must be at least as long as the input variable
data _null_;
a = 'ABCD ';
attrib LastChar length= $1;
LastChar = put(a, $REVERS100.);
put _all_;
run;
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.