Here is a next way
data have;
ID_NUMBER= 12345678;
NOTE ='**system message** **system update** **mm/dd/yy - blablablablabla**';
output;
ID_NUMBER= 12345679;
NOTE ='**system message** **mm/dd/yy - blablabla ** **mm/dd/yy - wahwahwahwah';
output;
run;
data want;
set have;
ExpressionID = prxparse('/[A-Z0-9._%+\/]+(\s+|\s+\-\s+)[A-Z0-9._%+\/]+/i');
start = 1;
stop = length(NOTE);
/* Use PRXNEXT to find the first instance of the pattern, */
/* then use DO WHILE to find all further instances. */
/* PRXNEXT changes the start parameter so that searching */
/* begins again after the last match. */
call prxnext(ExpressionID, start, stop, NOTE, position, length);
do while (position > 0);
found = substr(NOTE, position, length);
put found= position= length=;
call prxnext(ExpressionID, start, stop, NOTE, position, length);
output;
end;
drop ExpressionID start stop position length;
run;
... View more