Вы можете использовать функцию prxnext
(двенадцатая страница здесь ). В вашем случае это будет выглядеть (вам нужно инициализировать num значений, в моем примере это 3):
data have;
string = "123 aa456 aa678";
output;
string = "123 aa99 aa678";
output;
string = "45 aa28 aa234";
output;
run;
data check_next(keep=id: string);
array ids{3} id1-id3;
set have;
if _n_=1 then do;
retain re;
re = prxparse('/[\d]+/');
if missing(re) then do;
putlog 'ERROR: a regex is malformed';
stop;
end;
end;
start = 1;
stop = length(string);
call prxnext(re,start,stop,string,startposn,len);
do i = 1 to 3 while(startposn > 0);
ids{i} = input(substr(string,startposn,len),5.);
call prxnext(re,start,stop,string,startposn,len);
end;
run;
Иметь набор данных:
+=================+
| string |
+=================+
| 123 aa456 aa678 |
+-----------------+
| 123 aa99 aa678 |
+-----------------+
| 45 aa28 aa234 |
+-----------------+
Набор данных Check_next:
+=====+=====+=====+=================+
| id1 | id2 | id3 | string |
+=====+=====+=====+=================+
| 123 | 456 | 678 | 123 aa456 aa678 |
+-----+-----+-----+-----------------+
| 123 | 99 | 678 | 123 aa99 aa678 |
+-----+-----+-----+-----------------+
| 45 | 28 | 234 | 45 aa28 aa234 |
+-----+-----+-----+-----------------+