@hubertsng:
My understanding of your rules (after your Nth explanation) is:
- From a given set of variable names in SAS data set HAVE, select the variable names:
starting with a given prefix (e.g., "S")
followed by up to 3 digits
followed by a non-digit
You don't need to go to the dictionary tables for this - the DATA step compiler is a good enough tool:
data have ;
call missing (S1_a, S10p4q, S77bb12, S85_xyz23, S100, SS, S_33, SAb99, Z01_w) ;
run ;
data want (keep = _vn) ;
length _vn $ 32 ;
_p = "S" ; * prefix ;
_d = 3 ; * number of digits after prefix before non-digit ;
do until (_vn = "") ;
call vnext (_vn) ;
if _vn =: _p and 1 < notdigit (substr (_vn, 1 + length (_p))) < _d + 2 then output ;
end ;
stop ;
set have ;
run ;
Now that you have the data set WANT you can do with the _VN values in it whatever you want. In fact, if you just want to create a bunch of macro variables based on the _VN values, you don't even need to write WANT - it can be done in the same DO loop shown above.
Kind regards
Paul D.
... View more