Revision: 21384
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 11, 2009 12:09 by sastechies
Initial Code
/** SAS Macro to add a prefix to some or all variables in a data set... to be used like this... %prefixvars(inpdsn,prefix,outdsn,excludevars=); inpdsn - input dataset name libname.dsnname prefix - prefix that you want to assign outdsn - output dataset name libname.dsnname excludevars - vars that you do not want to rename with the prefix **/ %macro prefixvars(inpdsn,prefix,outdsn,excludevars=); /* split the excludevars into individual macro var names for later use*/ %let num=1; %let excludevar=%scan(%upcase(&excludevars),&num,' '); %let excludevar&num=&excludevar; %do %while(&excludevar ne ); %let num=%eval(&num + 1); %let excludevar=%scan(&excludevars,&num,' '); %let excludevar&num=&excludevar; %end; %let numkeyvars=%eval(&num - 1); /* this is number of variables given in the exclude vars */ %let dsid=%sysfunc(open(&inpdsn)); /* open the dataset and get the handle */ %let numvars=%sysfunc(attrn(&dsid,nvars)); /* get the number of variables */ data &outdsn; set &inpdsn(rename=( /*rename all the variables that are not in the excludevars= */ %do i = 1 %to &numvars; %let flag=N; %let var&i=%sysfunc(varname(&dsid,&i)); %do j=1 %to &numkeyvars; %if %upcase(&&var&i) eq &&excludevar&j %then %let flag=Y; %end; %if &flag eq N %then %do; &&var&i=&prefix&&var&i %end; %end;)); %let rc=%sysfunc(close(&dsid)); run; %mend prefixvars; /*Call the macro now*/ %prefixvars(sashelp.buy,fr_,work.out,excludevars=date)
Initial URL
http://sastechies.blogspot.com/2009/11/sas-macro-to-add-prefix-to-some-or-all.html
Initial Description
Often we need to add a prefix to some or all variables in a dataset before we might have to merge datasets that have similar column attributes...This macro would allow you to do that.... Try it for yourself....
Initial Title
SAS Macro to add a prefix to some or all variables in a data set...
Initial Tags
Initial Language
SAS