data lows; attrib test length=$5 date format=date.; pat=1;date='1jan01'd;test='hgb';value=1;output; test='plats';value=2;output; pat=1;date='2jan01'd;test='hgb';value=3;output; test='plats';value=4;output; pat=2;date='1jan01'd;test='hgb';value=5;output; test='plats';value=7;output; pat=2;date='2jan01'd;test='hgb';value=6;output; test='plats';value=8;output; run; %macro demo; proc transpose data=lows prefix=lo_ out=xlows; by pat date; id test; run; /* Put var names into an array */ proc contents data=xlows noprint out=xlows_c; run; data _null_; set xlows_c end=finish; where name eq: 'lo_'; call symput('VN'!!compress(putn(_n_,'6.')) ,name); if finish then call symput('VNTOTAL',putn(_n_,'BEST.')); run; %put vn1=&vn1; %put vn2=&vn2; %put vntotal=&vntotal; /* Now do the processing */ data fail; set xlows; %do i=1 %to &vntotal; %put &&&vn&i; %if %substr(&&&vn&i,1,3) eq lo_ %then %do; put 'it is a low limit value'; %end; %end; run; %mend demo; options mprint NOmlogic; options validvarname=v7; /* or v6 */ %demo;