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 lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.