<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Changing columns names across multiple data sets in a library in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683199#M206909</link>
    <description>&lt;P&gt;You can use next tested code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test1 test2 test3;
    var1="A";
    var2="B";
    var3="C";
run;

proc format lib=work;
  value renvar
    1 = 'Name'
	2 = 'Address'
	3 = 'State'
; run;

%macro renall(lib=,dsprefix=,varpref=);
   /* lib = library containing the datasets */
   /* dsprefix = dataset prefix - yot DETAIL */
   /* varpref = variables' prefix to rename from, by using above format */
   proc sort data=sashelp.vcolumn(where=(
                strip(libname)=%sysfunc(upcase("&amp;amp;lib")) and 
			    upcase(substr(memname,1,%length(&amp;amp;dsprefix))) = upcase("&amp;amp;dsprefix") and
				upcase(upcase(substr(name,1,%length(&amp;amp;varpref)))) = upcase("&amp;amp;varpref") ))
              out=mylist;
		by memname name;
	run;

	data _null_;
	 set mylist;
	  by memname;
	     length prog $10000;
		 retain prog nvar ;
	     if first.memname then do;
		    prog = "proc datasets lib=&amp;amp;lib nolist;" ||
			       "modify " || memname || "; Rename ";
			nvar=1;
		 end;
		 prog = compbl(prog || strip(name) || " = " 
		              || put(nvar,renvar32.) || " " );
		 nvar = nvar +1;
		 if last.memname then do;
		    prog = compbl(prog || "; run;");
			putlog prog;  /*for debug */
			call execute(prog);
		 end;
	run;
%mend renall;
%renall(lib=work,dsprefix=test,varpref=var);
		&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 11 Sep 2020 08:57:03 GMT</pubDate>
    <dc:creator>Shmuel</dc:creator>
    <dc:date>2020-09-11T08:57:03Z</dc:date>
    <item>
      <title>Changing columns names across multiple data sets in a library</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683164#M206897</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have 3 datasets in a library (WORK) named DETAIL1, DETAIL2, DETAIL3.&amp;nbsp; These datasets all contain column names Var1, Var2, Var3.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I know how to change the columns names of a given data set in a library:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data x;
set DETAIL_1;
rename 
var1=Name
var2=Address
var3=State
;run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How can I do this dynamically to also rename the variables in DETAIL2, DETAIL3, DETAILx etc?&amp;nbsp; Is there a way to use memname to accomplish this ?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SQL;

SELECT MEMNAME INTO : MEMNAMES SEPARATED BY ' ' from dictionary.tables where libname='WORK' and memname like 'DET%';quit;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 11 Sep 2020 05:33:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683164#M206897</guid>
      <dc:creator>SAS_ACE</dc:creator>
      <dc:date>2020-09-11T05:33:10Z</dc:date>
    </item>
    <item>
      <title>Re: Changing columns names across multiple data sets in a library</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683168#M206900</link>
      <description>&lt;P&gt;You've got the right idea, but, since all the Memnames are essentially the same, instead of getting the Memnames themselves, just get a count, like so:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SQL	NOPRINT;
	SELECT		COUNT(1)	INTO	:	Mem_Cnt
		FROM	Dictionary.Tables
		WHERE	LIBNAME	=		'WORK'
			AND Memname LIKE	UPCASE("&amp;amp;Base_Name%")
			;
QUIT;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Notice that the name here doesn't even have to be "DETAIL."&amp;nbsp; I made the base table name a macro variable so that you can name the tables anything you want so long as they have a common base name followed by a number (or really any character).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once you've got the count of tables with matching base names, run a small macro, like so:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;amp;Null	%MACRO	Rename_DS();
	%LOCAL	i;
	%DO	i	=	1	%TO	&amp;amp;Mem_Cnt;
		DATA	Renamed_&amp;amp;Base_Name&amp;amp;i;
			SET	&amp;amp;Base_Name&amp;amp;i	(RENAME=(Var1=Name Var2=Address Var3=State));
		RUN;
	%END;
%MEND	Rename_DS;

%Rename_DS;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;"&amp;amp;Null" resolves to (literally) nothing and is just there to maintain colorization in the SAS editor.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That's it; your done.&amp;nbsp; Your results look like this:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Macro_Renames_2020-09-10_23-20-59.jpg" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49264i758A27DEA65138F8/image-size/large?v=v2&amp;amp;px=999" role="button" title="Macro_Renames_2020-09-10_23-20-59.jpg" alt="Macro_Renames_2020-09-10_23-20-59.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;P.S.&amp;nbsp; In case it's useful, below is the full code that includes creating the original DETAIL datasets using a macro base name:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%LET	Null		=	;
%LET	Base_Name	=	Detail_;

**------------------------------------------------------------------------------**;

&amp;amp;Null	%MACRO	Create_DS(i);
	DATA	&amp;amp;Base_Name&amp;amp;i;
		Var1="Joe&amp;amp;i";
		Var2="&amp;amp;i&amp;amp;i&amp;amp;i Main Street";
		Var3="WA";
	RUN;
%MEND	Create_DS;

%Create_DS(1);
%Create_DS(2);
%Create_DS(3);

**------------------------------------------------------------------------------**;

PROC SQL	NOPRINT;
	SELECT		COUNT(1)	INTO	:	Mem_Cnt
		FROM	Dictionary.Tables
		WHERE	LIBNAME	=		'WORK'
			AND Memname LIKE	UPCASE("&amp;amp;Base_Name%")
			;
QUIT;

%PUT	&amp;amp;=Mem_Cnt;

**------------------------------------------------------------------------------**;

&amp;amp;Null	%MACRO	Rename_DS();
	%LOCAL	i;
	%DO	i	=	1	%TO	&amp;amp;Mem_Cnt;
		DATA	Renamed_&amp;amp;Base_Name&amp;amp;i;
			SET	&amp;amp;Base_Name&amp;amp;i	(RENAME=(Var1=Name Var2=Address Var3=State));
		RUN;
	%END;
%MEND	Rename_DS;

%Rename_DS;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 11 Sep 2020 06:27:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683168#M206900</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-11T06:27:55Z</dc:date>
    </item>
    <item>
      <title>Re: Changing columns names across multiple data sets in a library</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683176#M206904</link>
      <description>&lt;P&gt;This problem should be fixed in the process reading the files, not afterwards.&lt;/P&gt;</description>
      <pubDate>Fri, 11 Sep 2020 07:04:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683176#M206904</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2020-09-11T07:04:37Z</dc:date>
    </item>
    <item>
      <title>Re: Changing columns names across multiple data sets in a library</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683199#M206909</link>
      <description>&lt;P&gt;You can use next tested code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test1 test2 test3;
    var1="A";
    var2="B";
    var3="C";
run;

proc format lib=work;
  value renvar
    1 = 'Name'
	2 = 'Address'
	3 = 'State'
; run;

%macro renall(lib=,dsprefix=,varpref=);
   /* lib = library containing the datasets */
   /* dsprefix = dataset prefix - yot DETAIL */
   /* varpref = variables' prefix to rename from, by using above format */
   proc sort data=sashelp.vcolumn(where=(
                strip(libname)=%sysfunc(upcase("&amp;amp;lib")) and 
			    upcase(substr(memname,1,%length(&amp;amp;dsprefix))) = upcase("&amp;amp;dsprefix") and
				upcase(upcase(substr(name,1,%length(&amp;amp;varpref)))) = upcase("&amp;amp;varpref") ))
              out=mylist;
		by memname name;
	run;

	data _null_;
	 set mylist;
	  by memname;
	     length prog $10000;
		 retain prog nvar ;
	     if first.memname then do;
		    prog = "proc datasets lib=&amp;amp;lib nolist;" ||
			       "modify " || memname || "; Rename ";
			nvar=1;
		 end;
		 prog = compbl(prog || strip(name) || " = " 
		              || put(nvar,renvar32.) || " " );
		 nvar = nvar +1;
		 if last.memname then do;
		    prog = compbl(prog || "; run;");
			putlog prog;  /*for debug */
			call execute(prog);
		 end;
	run;
%mend renall;
%renall(lib=work,dsprefix=test,varpref=var);
		&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 11 Sep 2020 08:57:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683199#M206909</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2020-09-11T08:57:03Z</dc:date>
    </item>
    <item>
      <title>Re: Changing columns names across multiple data sets in a library</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683217#M206916</link>
      <description>&lt;P&gt;Alternative code using full variable name in proc format step:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test1 test2 test3;
    var1="A";
    var2="B";
    var3="C";
run;

proc format lib=work; /* left side should be in UPCASE */
  value $renvar
    "VAR1" = 'Name'
	"VAR2" = 'Address'
	"VAR3" = 'State'
; run;

%macro renall(lib=,dsprefix=,varpref=);
   /* lib = library containing the datasets */
   /* dsprefix = dataset prefix - your DETAIL */
   /* varpref = variables' prefix to rename from, by using above format */
   proc sort data=sashelp.vcolumn(where=(
                strip(libname)=%sysfunc(upcase("&amp;amp;lib")) and 
			    upcase(substr(memname,1,%length(&amp;amp;dsprefix))) = upcase("&amp;amp;dsprefix") and
				upcase(upcase(substr(name,1,%length(&amp;amp;varpref)))) = upcase("&amp;amp;varpref") ))
              out=mylist;
		by memname name;
	run;

	data _null_;
	 set mylist;
	  by memname;
	     length prog $10000;
		 retain prog nvar ;
	     if first.memname then do;
		    prog = "proc datasets lib=&amp;amp;lib nolist;" ||
			       "modify " || memname || "; Rename ";
			nvar=1;
		 end;
		 prog = compbl(prog || strip(name) || " = " 
		            || put(upcase(compress("&amp;amp;varpref"||put(nvar,3.))),$renvar32.) || " " );
		 nvar = nvar +1;
		 if last.memname then do;
		    prog = compbl(prog || "; run;");
			putlog prog;  /*for debug */
			call execute(prog);
		 end;
	run;
%mend renall;
options mprint symbolgen;
%renall(lib=work,dsprefix=test,varpref=var);
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 11 Sep 2020 14:43:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683217#M206916</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2020-09-11T14:43:03Z</dc:date>
    </item>
    <item>
      <title>Re: Changing columns names across multiple data sets in a library</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683250#M206931</link>
      <description>Thank you for your help. This is exactly what I was trying to do. There is definitely lots here for me to learn so I appreciate the work and effort you put into this.&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Fri, 11 Sep 2020 14:30:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683250#M206931</guid>
      <dc:creator>SAS_ACE</dc:creator>
      <dc:date>2020-09-11T14:30:55Z</dc:date>
    </item>
    <item>
      <title>Re: Changing columns names across multiple data sets in a library</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683253#M206933</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/227735"&gt;@SAS_ACE&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have 3 datasets in a library (WORK) named DETAIL1, DETAIL2, DETAIL3.&amp;nbsp; These datasets all contain column names Var1, Var2, Var3.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I know how to change the columns names of a given data set in a library:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data x;
set DETAIL_1;
rename 
var1=Name
var2=Address
var3=State
;run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Technically that code does not "change" variable names. It creates an entirely new data set with differently named variables eve if you reuse the data set name for source and output.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Proc datasets will change the names, format or labels of variables in place.&lt;/P&gt;
&lt;PRE&gt;Proc datasets library=work;
   modify detail_1;
   rename 
       var1=Name
       var2=Address
       var3=State
   ;
run;
quit;&lt;/PRE&gt;
&lt;P&gt;changes the names in place. This can make a big difference in execution time if the data set is large since it does not rebuild the entire data set.&lt;/P&gt;</description>
      <pubDate>Fri, 11 Sep 2020 20:36:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683253#M206933</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2020-09-11T20:36:24Z</dc:date>
    </item>
    <item>
      <title>Re: Changing columns names across multiple data sets in a library</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683304#M206946</link>
      <description>&lt;P&gt;Hi Everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I also wanted to share another solution that looks like it is working (found on another site).&amp;nbsp; Not sure what the "risks" or blind spots are with this one, but wanted to add this to the thread.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
  set sashelp.vtable end = eof;
  /*Replace xx with your two-letter dataset prefix*/
  where libname = upcase('work') and memname eq: upcase('TE') and memtype = 'DATA';
  if _n_ = 1 then call execute('proc datasets lib = work;');
  call execute(catx(' ','modify',memname,'; rename var1 = newvar1 var2 = newvar2; run;'));
  if eof then call execute('quit;');
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 11 Sep 2020 16:51:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Changing-columns-names-across-multiple-data-sets-in-a-library/m-p/683304#M206946</guid>
      <dc:creator>SAS_ACE</dc:creator>
      <dc:date>2020-09-11T16:51:39Z</dc:date>
    </item>
  </channel>
</rss>

