Hi, instead of writing all the below out for 100 variables I would like to simplify it with a macro do loop. However, I am unsure of how I would do this as I need not only the value of 'i' but the value of 'i'+1 in each iteration of the do loop to make it work. How would I resolve this issue - see in the macro I am trying to write below, I have left question marks where I am unsure how to write a variable that I essentially want to resolve as x(&i.+1). is there any way of actually writing this do loop so I can simplify the x1=x2 x2=x3 etc.?
data want;
set have;
rename x1=x2 x2=x3 x3=x4 x4=x5.....x99=x100;
run;
%macro abc;
data want;
set have;
rename %do i=1 %to 99; x&i.=x????? %end;;
run;
mend;
%abc;
Major error: missing % for %mend statement. If you have actually run that code the SAS session is likely unstable.
%macro abc; data want; set have; rename %do i=1 %to 99; x&i.=x%eval(&i+1) %end; ; run; %mend;
Please post code in a code box opened on the forum with either the </> or "running man" icon.
Note the indentation to tell where the macro do loop starts and ends a bit easier than all on one line and that the semicolon that ends the Rename is also more visible to that purpose.
If the sole purpose of code is to rename variables then you should do it that with Proc Datasets. A data step like this has to process every observation and for large data sets code be quite time consuming. Proc datasets will do this in place.
Proc datasets library=work; modify have; rename x1=x2 x2=x3 <repeat> ; run; quit;
Major error: missing % for %mend statement. If you have actually run that code the SAS session is likely unstable.
%macro abc; data want; set have; rename %do i=1 %to 99; x&i.=x%eval(&i+1) %end; ; run; %mend;
Please post code in a code box opened on the forum with either the </> or "running man" icon.
Note the indentation to tell where the macro do loop starts and ends a bit easier than all on one line and that the semicolon that ends the Rename is also more visible to that purpose.
If the sole purpose of code is to rename variables then you should do it that with Proc Datasets. A data step like this has to process every observation and for large data sets code be quite time consuming. Proc datasets will do this in place.
Proc datasets library=work; modify have; rename x1=x2 x2=x3 <repeat> ; run; quit;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 16. Read more here about why you should contribute and what is in it for you!
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.
Select SAS Training centers are offering in-person courses. View upcoming courses for: