I need to produce a SAS-dataset in which the initials of the client have to be splitted by dots.
Input SAS dataset | Output SAS dataset must be like this | |||
Initials | Last_name | Initials must be | Last_name | |
K | Jansen | K. | Jansen | |
JL | de Vries | J.L. | de Vries | |
GJPG | Boersma | G.J.P.G. | Boersma |
please show sample input data and output data you want to have . Many of us will not open attachments for various issues like virus etc.
data have;
input initials :$5. last_name :$20.;
cards;
K Jansen
JL deVries
GJPG Boersma
;
run;
data want;
length initials $10;
set have (rename=(initials=_initials));
do i = 1 to length(_initials);
initials = trim(initials) !! substr(_initials,i,1) !! '.';
end;
drop i _initials;
run;
proc print data=want noobs;
run;
Note the way I presented example data in a data step for easy recreation (needs only copy/paste and run).
Also note how I took care of the increasing length of the initials variable.
The result:
last_ initials name K. Jansen J.L. deVries G.J.P.G. Boersma
PRX seems handy:
data have;
infile cards truncover ;
input var $ 100.;
newvar=prxchange('s/(\w)/$1./',-1,var);
cards;
K
Jansen
JL
de Vries
JPG
Boersma
;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.