All;
I have data as the following.
data have;
input string $40.;
datalines;
c 10 year fixed
n 30 year fixed
n 15 year fixed
sh nchfa fha 30 year
c 30 year fixed homepath
c 7 yr arm homepath
;
run;
I want to substring from a string to get the column like:
10 year
30 year
15 year
30 year
7 yr
Thanks
Another PRX Function.
data have;
input string $40.;
datalines;
c 10 year fixed
n 30 year fixed
n 15 year fixed
sh nchfa fha 30 year
c 30 year fixed homepath
c 7 yr arm homepath
;
run;
data want(drop=pid);
set have;
length year $ 20;
retain pid;
if _n_ eq 1 then pid=prxparse('/(\d+\s*(year|yr))/i');
if prxmatch(pid,string) then year=prxposn(pid,1,string);
run;
Ksharp
The ideal candidate for PRX regular expressions :
data have;
input string $40.;
datalines;
c 10 year fixed
n 30 year fixed
n 15 year fixed
sh nchfa fha 30 year
c 30 year fixed homepath
c 7 yr arm homepath
;
data want(keep=y);
retain prxId;
set have;
if _n_ = 1 then prxId = prxparse("/\d+\s+y(ea)*r/i");
call prxsubstr(prxId, string, pos, len);
if pos>0 then do;
y = substr(string,pos, len);
output;
end;
run;
proc print; run;
PG
PG Slightly improved the pattern
hi ... another idea ...
data want;
length y $10;
set have;
y = catx(' ',scan(substr(string,findc(string,,'d')),1),scan(substr(string,findc(string,,'d')),2));
run;
how about:
data have;
input string $40.;
datalines;
c 10 year fixed
n 30 year fixed
n 15 year fixed
sh nchfa fha 30 year
c 30 year fixed homepath
c 7 yr arm homepath
;
data want(keep=new:);
length new_string $ 7;
set have;
new_string=catx(' ',compress(string,,'kd'),'year');
proc print;run;
Linlin
Linlin, seems like QLi wants 'yr' on the last line. ![]()
PG
PG,
In that case, my code will not work.
Another PRX Function.
data have;
input string $40.;
datalines;
c 10 year fixed
n 30 year fixed
n 15 year fixed
sh nchfa fha 30 year
c 30 year fixed homepath
c 7 yr arm homepath
;
run;
data want(drop=pid);
set have;
length year $ 20;
retain pid;
if _n_ eq 1 then pid=prxparse('/(\d+\s*(year|yr))/i');
if prxmatch(pid,string) then year=prxposn(pid,1,string);
run;
Ksharp
Very nice Ksharp!
PG
It works great. Thanks, All
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and save with the early bird rate—just $795!
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.