To add a bit of context to KurtBremser's answer: data want; set have; length nextword $ 6; /* don't need to extract any more than 6 characters */ length zip_code $ 5; if irregular_string > ' ' then do i=1 to countw(irregular_string, ' '); nextword = scan(irregular_string, i, ' '); if length(nextword)=5 and notdigit(next_word) = 6 then do; if next_word =: '60' then zip_code = next_word; end; end; drop next_word i; run; The logic might be a bit trickier than it looks. Once the length of a word is established as 5, the 6th character must be a blank. So the NOTDIGIT function must return 6 (since blanks are not digits) to identify a 5-digit number. Also, by defining the length of zip_code as $ 5, that trailing blank is automatically dropped from its value. Also note that COUNTW uses a set of characters as default delimiters, so specify a blank as the only allowable delimiter. Using =: is a faster way to examine the beginning of a character string (instead of substr). Good luck.
... View more