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
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.