This example may further your understanding. It looks for a string that is all uppercase and 2 bytes long. Using call scan I find the position and length of each uppercase string. if length eq 2. substring the target from p for l. Using SCAN function you would have to measure the result returned from SCAN. Same but different.
data _2upcase;
input string $50.;
do c=1 by 1 until(l eq 2 or p eq 0);
call scan(strip(string),c,p,l,,'ldsp');
end;
length _2upcase $2;
_2upcase = substrn(string,p,l);
cards;
nndkd11UUndkdLLL
kdnakaliueoina
nnnlllLLLlllLLlll
thisISa2DIgit
this IS silly
this.IS.silly
;;;;
run;
I reckon this could be replaced with a one line RegEX but that's another topic.
... View more