Hi,
I have a data with the following ID's
SGJ604-01-A
AFD345-03-A
I want to change the last alphabet "A" to the number "0"
Can I do this in SAS. please let me know thanks in advance.
Try this:
if char(id,length(id))='A' then substr(id,length(id))='0';
Example:
458 data want; 459 set have; 460 put id= '-> ' @; 461 if char(id,length(id))='A' then substr(id,length(id))='0'; 462 put id; 463 run; id=SGJ604-01-A -> SGJ604-01-0 id=SGJ604-02-B -> SGJ604-02-B id=AFD345-03-A -> AFD345-03-0
Try this:
if char(id,length(id))='A' then substr(id,length(id))='0';
Example:
458 data want; 459 set have; 460 put id= '-> ' @; 461 if char(id,length(id))='A' then substr(id,length(id))='0'; 462 put id; 463 run; id=SGJ604-01-A -> SGJ604-01-0 id=SGJ604-02-B -> SGJ604-02-B id=AFD345-03-A -> AFD345-03-0
Here is a really interesting solution that uses the SUBSTR function on the LEFT side of the = sign. I assume you mean the digit 0 (character) for the last position. Here it is:
data Test;
length String $ 11;
input String;
substr(String,11,1) = '0';
datalines;
SGJ604-01-A
AFD345-03-A
;
title "Listing of Test";
proc print data=Test;
run;
Hope this helps,
Ron
@Ron_Cody wrote:
Here is a really interesting solution that uses the SUBSTR function on the LEFT side of the = sign. I assume you mean the digit 0 (character) for the last position. Here it is:
data Test;
length String $ 11;
input String;
substr(String,11,1) = '0';
datalines;
SGJ604-01-A
AFD345-03-A
;
title "Listing of Test";
proc print data=Test;
run;Hope this helps,
Ron
That unconditionally changes the character to 0. OP only wants the last character to change when it is 'A'
Hi. I didn't notice the specification that the last character in the string had to be 'A', so I modified my solution:
data Test;
length String $ 11;
input String;
if findc(String,'A',lengthn(String)-1) then substr(String,11,1) = '0';
datalines;
SGJ604-01-A
XXX999-090B
AFD345-03-A
;
title "Listing of Test";
proc print data=Test;
run;
The last argument in the FINDC function is a starting position. The LENGTHN function is the same as the older LENGTH function--it returns the length of a string, not counting trailing blanks. The 'N' version returns a 0 when the first argument is a missing value; the non 'N' (older function) returns a 1 in this situation. I recommend always using LENGTHN. Hope this helps and clarifies.
data Test;
length String $ 11;
input String;
datalines;
SGJ604-01-A
AFD345-03-A
;
data want;
set test;
want=prxchange('s/a$/0/i',1,strip(string));
run;
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.