/* varform.sas Daniel Brockman replace var names with x1, x2, ... */ /* contents: 1. numberoff. creates numbered set of variable names. 2. varform. rename data set vars to numbered names in new data set. /* --------------------------------------------------------- */ %macro numberoff(varlist,xchar); /* number off new X names. new names are X1, X2, ... where X is one or more chars specified in parameter xchar This macro intended for call from macro varform */ %local i var; %let i=0; %do %while(%scan(&varlist,&i+1,%str()) ne %str()); %let i = %eval(&i+1); %let var = %scan(&varlist,&i,%str()); &var = &&xchar&i; %end; %mend numberoff; /* --------------------------------------------------------- */ %macro varform(inp,xset,xchar); /* * renames variables in input data set inp to X1, X2, ... * in output data set xset, where X is one or more characters * contained in parameter &xchar * reference: http://support.sas.com/ctx/samples/index.jsp?sid=818 */ %local i j varlist c3po ob2kinob xlist; %put L40 inp:&inp xset:&xset xchar:&xchar ; /* test */ /* put the names of the variables in a data set */ proc contents data=&inp noprint out=c3po varnum ; run; /* extract names of variables into macro var varlist */ data t1varform; set c3po; length ob2kinob $ 4096; retain ob2kinob; if (_N_=1) then ob2kinob=trim(name); else ob2kinob= trim(ob2kinob) || ' ' || trim(name) ; call symput('varlist',trim(ob2kinob)); run; %put L57 varlist: &varlist ; /* test */ /* make output set */ data &xset ; set &inp. (rename=( %let i=0; /* %do %while(%scan(&varlist,&i+1,%str()) ne %str()); */ %do %while(%scan(&varlist,&i+1) ne ); %let i = %eval(&i+1); %let var = %scan(&varlist,&i); &var = &xchar.&i /* <--- write the rename line */ %end; )); run; %mend varform; /* --------------------------------------------------------- */ ;