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;
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.