*---Purpose: Example of Merging multiple data sets based on single match id;

 

*---Create example datasets for the example;

*---Macro RAN_SDS sas datasets with random number of observations;

%macro ran_sds1( n );

  %local i ;

  %do i = 1 %to &n ;

     data ran&i;

        do id=1 to int(1000*ranuni( 0 ))+1;

              var&i = 100*ranuni(2324);

              output ;

            end;

       run;

  %end;

%mend;

 

%ran_sds1( 10 ) ;

 

*---Create example (master) data set;

data master;

  do id=1 to 1000;

    var = int(10000*ranuni(2324));

    output;

  end;

run;

 

*---Macro m_merge will merge 10 data sets by ID variable;

 

%let list = ran1 ran2 ran3 ran4 ran5 ran6 ran7 ran8 ran9 ran10;

 

%macro m_merge( list );

  %let i = 1;

  %do %until(%scan(&list,&i, %str()) = %str());

    %let sds = %scan(&list,&i, %str());

    %if &i = 1 %then

        %do;

         data merg;

               merge master

                     &sds;

               by id;

           run;

        %end;

        %else

          %do;

          data merg;

                merge merge

                        &sds;

                  by id;

              run;

            %end;

      %let i = %eval(&i+1) ;

  %end;

%mend;

 

*---Execute Macro;

options mprint ;

%m_merge( &list );