%macro HILDARenameStripFirst(dataset); /* -------------------------------------------------------------------------- Generates a rename statement of the form Xvar1=var1 Xvar2=var2 etc where XvarN includes all variables (except Xwaveid). Usage example when setting up a long file: data long2; set hilda.combined_a (rename=(%HILDARenameStripFirst(hilda.combined_a)) in=in1) hilda.combined_b (rename=(%HILDARenameStripFirst(hilda.combined_b)) in=in2); if in1 then Wave=1; else if in2 then Wave=2; keep xwaveid hhrhid wave; run; proc sort data=long2;by xwaveid wave;run; Bruce Bradbury Aug07. Tested on SAS version 9.1.3 I used SAS paper 107-28 by Derek Morgan as inspiration for the sysfunc calls. ----------------------------------------------------------------------------- */ %let DS = %sysfunc(open(&dataset,i)); /* open dataset to get variable names */ %if (&DS = 0) %then %put %sysfunc(sysmsg()); /* if can't open */ %else %do i=1 %to %sysfunc(attrn(&DS,NVARS)); %let varname = %sysfunc(varname(&DS,&i)); /* get the ith variable name */ %let newvarname = %substr(&varname,2); /* strip off the first character */ %if %upcase(&varname)^=XWAVEID %then %do; %* output code here; &varname=&newvarname %end; %end; %let CloseCode = %sysfunc(close(&DS)); %mend HILDARenameStripFirst;