- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Linlin, seems like QLi wants 'yr' on the last line.
PG
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
PG,
In that case, my code will not work.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Very nice Ksharp!
PG
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
It works great. Thanks, All