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
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.