BookmarkSubscribeRSS Feed
sahoositaram555
Pyrite | Level 9

Hi,

I have 3 datasets named S1 S2 S3 in the default work directory[i.e. produced from the last executed step], which should be used in a merge statement and the variable names should be renamed based on the numeric they are carrying.

 

I would like to create a macro for this process. These input datasets(S1 S2 S3) can change to anything(eg:outk1 outk2 outk3).

 

Without macro i've wrote the below code, would like to do it with the help of macro so that later based on the inputs(like s1 s2 s3 ) it will do my job  accordingly.

 

finalS;

merge s1(rename=(var_a=a1 var_b=b1 var_c=c1)

s2(rename=(var_a=a2 var_b=b2 var_c=c2))

s3(rename=(var_a=a3 var_b=b3 var_c=c3))

run;

 

any thoughts, comments?

2 REPLIES 2
gamotte
Rhodochrosite | Level 12

Hello,

 

If i understand you correctly :

%macro merge(dsname);

    data final&dsname.;
        merge %do i=1 %to 3;
            &dsname.&i. (rename=(var_a=a&i. var_b=b&i. var_c=c&i.))
        %end;
        ;
    run;

%mend;

%merge(S)

Note : untested.

RichardDeVen
Barite | Level 11

This macro accepts parameters that specify data set name prefixes and variable name prefixes and number of each thereof.

 

If you want a more abstract macro, say one that examines the members of a library and discovers the common names of the variables therein, you will need a more complex process.

 

Example:

%macro enwidening_rename(data=, n=, var=, m=);

  %local i j letter;

  %do i = 1 %to &n;

    &data.&i ( rename = (

    %do j = 1 %to &m;

      %let letter = %sysfunc(byte(64+&j));

      &var._&letter = &letter.&i

    %end;

    ))

  %end;

%mend;


data s1 s2 s3;
  var_a = 010; var_b = 020; var_c = 030; output s1;
  var_a = 110; var_b = 120; var_c = 130; output s2;
  var_a = 210; var_b = 220; var_c = 230; output s3;
run;


options mprint;

data all;
  merge
    %enwidening_rename(data=s, n=3, var=var, m=3)
  ;

  * no by statement ?, be careful and certain;
run;

Result

RichardADeVenezia_0-1595329516615.png

 

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
  • 873 views
  • 1 like
  • 3 in conversation