BookmarkSubscribeRSS Feed
GregG
Quartz | Level 8

I pull from a database that has sum, but not all, variables prefixed with XCBM_

I would like to remove all of these prefixes from the variables name.

Here is what I have tried:

DATA TEST;

    SET SASHELP.BWEIGHT;

RUN;

%MACRO RENAME(LIB=,DSN=);

PROC CONTENTS DATA=&LIB..&DSN;

    TITLE 'BEFORE';

RUN;

PROC SQL NOPRINT;

    SELECT    NVAR INTO :NUM_VARS

    FROM    DICTIONARY.TABLES

    WHERE    LIBNAME="&LIB" AND MEMNAME="&DSN"

    ;

    SELECT    DISTINCT(NAME) INTO :VAR1-:VAR%TRIM(%LEFT(&NUM_VARS))

    FROM    DICTIONARY.COLUMNS

    WHERE    LIBNAME="&LIB" AND MEMNAME="&DSN"

    ;

QUIT;

%PUT &NUM_VARS;

PROC DATASETS LIBRARY = &LIB;

    MODIFY &DSN;

    RENAME

    %DO I = 1 %TO &NUM_VARS.;

        %IF %SUBSTR(&&VAR&I,1,2) = 'm_' %THEN %DO;

            &&VAR&I = %SUBSTR(&&VAR&I,3);

        %END;

    %END;

    ;

RUN;

QUIT;

   

PROC CONTENTS DATA=&LIB..&DSN.;

    TITLE 'AFTER';

RUN;

%MEND RENAME;

%RENAME(LIB=WORK,DSN=TEST)

2 REPLIES 2
Reeza
Super User

How many variables do you expect? Can you use a single macro variable for the rename statement or would you expect it to be longer than 62K characters?

Reeza
Super User

Example could be adapted to work with prefixes below:

/********************************************************************

Example : Rename variables based on suffix rather than prefix

********************************************************************/

data sample;

do i=10000 to 12000;

start_date=i;

middle_date=i+3;

end_date=i+5;

date_no_change=start_date;

output;

end;

format start_date end_date middle_date date9.;

run;

proc sql noprint;

select catx("=", name, catt('DT_', tranwrd(upper(name), '_DATE', ' ')))

into :rename_list

separated by " "

from sashelp.vcolumn

where libname='WORK'

and memname='SAMPLE'

and upper(trim(name)) like '%_DATE';

quit;

%put &rename_list;

proc datasets library=work nodetails nolist;

modify sample;

rename &rename_list;

run; quit;

proc print data=sample noobs;

run;

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

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
  • 5475 views
  • 0 likes
  • 2 in conversation