Hi,
what is the best way to rename my variables?
data class;
set sashelp.class;
newage1=age;
newweight1=weight;
newheight1=heigt;
run;
I have a lot of variables end with '1'. I want to take out '1'.
in my example, I need to rename newage1=newage and all other variables.
Thanks!
how about:
data class;
set sashelp.class (obs=1);
newage1=age;
neww1=weight;
newh1=height;
run;
proc sql;
select catx('=',name,substr(name,1,length(name)-1)) into : list separated by ' '
from dictionary.columns
where libname='WORK' and memname='CLASS' and substr(name,length(name))='1';
quit;
data newclass;
set class;
rename &list;
run;
proc print;run;
how about:
data class;
set sashelp.class (obs=1);
newage1=age;
neww1=weight;
newh1=height;
run;
proc sql;
select catx('=',name,substr(name,1,length(name)-1)) into : list separated by ' '
from dictionary.columns
where libname='WORK' and memname='CLASS' and substr(name,length(name))='1';
quit;
data newclass;
set class;
rename &list;
run;
proc print;run;
Pretty close to what Linlin suggest but using a RegEx to match more precisely the variables you want renamed - and using Proc Datasets instead of a Data Step to do the renaming (and so avoiding a full pass through the data).
data class;
set sashelp.class;
newage1=age;
newweight1=weight;
newheight1=height;
run;
proc sql noprint;
select cats(name,'=',prxchange('s/(.+)(1\b)/$1/o',1,name)) into : list separated by ' '
from dictionary.columns
where libname='WORK' and memname='CLASS' and prxmatch('/.+1\b/',name)
;
quit;
proc datasets lib=work nolist;
modify class;
rename &list;
;
quit;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.