Quartz | Level 8

How to parse the first consecutive numeric substring from a character?

I want to extract the first numeric substring that shows up in a character variable. For example,

``````data have;
infile datalines delimiter = "," missover;
input string \$;
datalines;
abc 12345 &*ag21
bld#5432
8642 12 asd
kmdsf 657
run;

data want;
length string \$30. substring \$30.;
infile datalines dsd dlm='|' truncover ;
input string \$ substring \$;
datalines;
abc 12345 &*ag21|12345
bld#5432|5432
8642 12 asd|8642
kmdsf 657|657
run;``````

Is there a good way to do this in a data step?

1 ACCEPTED SOLUTION

Accepted Solutions
SAS Super FREQ

Re: How to parse the first consecutive numeric substring from a character?

You want to look at PRXPOSN Function - Extracting First and Last Names

``````data have;
infile datalines delimiter = "," missover;
input string \$;
datalines;
abc 12345 &*ag21
bld#5432
8642 12 asd
kmdsf 657
run;

data results ;
length string \$30. substring \$30.;
infile datalines dsd dlm='|' truncover ;
input string \$ substring \$;
datalines;
abc 12345 &*ag21|12345
bld#5432|5432
8642 12 asd|8642
kmdsf 657|657
run;

data wamt ;
retain patternID ;
set have ;
if _n_=1 then do ;
patternID=prxparse('/([0-9]+)/') ;
end ;
found=prxmatch(patternID,string) ;
want=prxposn(patternID,1,string) ;
put string= found= want= ;

run ;``````
SAS Super FREQ

Re: How to parse the first consecutive numeric substring from a character?

You want to look at PRXPOSN Function - Extracting First and Last Names

``````data have;
infile datalines delimiter = "," missover;
input string \$;
datalines;
abc 12345 &*ag21
bld#5432
8642 12 asd
kmdsf 657
run;

data results ;
length string \$30. substring \$30.;
infile datalines dsd dlm='|' truncover ;
input string \$ substring \$;
datalines;
abc 12345 &*ag21|12345
bld#5432|5432
8642 12 asd|8642
kmdsf 657|657
run;

data wamt ;
retain patternID ;
set have ;
if _n_=1 then do ;
patternID=prxparse('/([0-9]+)/') ;
end ;
found=prxmatch(patternID,string) ;
want=prxposn(patternID,1,string) ;
put string= found= want= ;

run ;``````
Discussion stats