Solved
Contributor
Posts: 59

# extract a substring from a string

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
Solution
‎06-13-2012 10:21 PM
Super User
Posts: 10,787

## Re: extract a substring from a string

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

All Replies
Posts: 5,541

## Re: extract a substring from a string

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

PG
Valued Guide
Posts: 765

## Re: extract a substring from a string

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;

Super Contributor
Posts: 1,636

## Re: extract a substring from a string

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

Posts: 5,541

## Re: extract a substring from a string

Linlin, seems like QLi wants 'yr' on the last line.

PG

PG
Super Contributor
Posts: 1,636

## Re: extract a substring from a string

PG,

In that case, my code will not work.

Solution
‎06-13-2012 10:21 PM
Super User
Posts: 10,787

## Re: extract a substring from a string

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

Posts: 5,541

## Re: extract a substring from a string

Very nice Ksharp!

PG

PG
Contributor
Posts: 59

## Re: extract a substring from a string

It works great. Thanks, All

🔒 This topic is solved and locked.