BookmarkSubscribeRSS Feed
mariko5797
Pyrite | Level 9

I have multiple datasets: XP1, XP2, XP3, XP4. Each dataset contains the same type of information. However all the variables start with the name of the form.

For example, variables in XP1 will be named XP1INM, XP1INF, XP1INP, XP1INO; and variables in XP2 will be named XP2INM, XP2INF, XP2INP, XP2INO; etc.

I would ideally like to stack these datasets so that I don't have to repeat a DATA Step for every single XP dataset. 

Is there a way to rename all the columns to remove the XP1, XP2, etc. prefixes so that my variables will be INM, INF, INP, INO? 

 

I'd like to be able to do something similar to below, but with a lot more variables.

data xp;
 set xp1 xp2 xp3 xp4;
 if INM = 'Y' then source = 'Mother';
 if INF = 'Y' then source = 'Family member';
 if INP = 'Y' then source = 'Physician';
 if INO = 'Y' then source = 'Other';
run;

 

2 REPLIES 2
ballardw
Super User

How are you bringing the data into SAS? If you have a program to read a text based file then you could read multiple files of similar structure and have the same variable names and just have the data set names differ (prevent the problem in the first place).

 

Proc datasets will rename variables in a data set. If the sets are in Work library replace YOURLIB with Work, or the name of the library.

IF you need a version of the data with the old variable names then COPY the data sets and do this to the copy.

proc datasets library=YOURLIB nolist;
   modify XP1 ;
      rename 
      XP1INM = Inm
      XP1INF = Inf
      XP1INP = Inp
      XP1INO = Ino
      ;
   modify XP2 ;
      rename 
      XP2INM = Inm
      XP2INF = Inf
      XP2INP = Inp
      XP2INO = Ino
      ;
   modify XP3 ;
      rename 
      XP3INM = Inm
      XP3INF = Inf
      XP3INP = Inp
      XP3INO = Ino
      ;
   modify XP4 ;
      rename 
      XP4INM = Inm
      XP4INF = Inf
      XP4INP = Inp
      XP4INO = Ino
      ;
quit;

Note that reading the data with a standard data step may prevent other possible issues such as different length or types of variables causing the combining data step to fail or truncate data.

smantha
Lapis Lazuli | Level 10
%macro prfx_name(prefix=prfx);
      rename = (
       %do i = 1 to %countw('inm inf inp ino');
           %let st1 = %scan('inm inf inp ino',&i.,' ');
             &prefix.&st1. =  &st1.
       %end;
)
%mend prfx_name;
data xp;
 set xp1(prfx_name(prefix='xp1'))
 xp2(prfx_name(prefix='xp2'))
 xp3(prfx_name(prefix='xp3')) 
xp4(prfx_name(prefix='xp4'));


run;

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 1519 views
  • 3 likes
  • 3 in conversation