Ha llegado una búsqueda y ponemos el truco. Creo que ya lo puse, pero no está mal recordarlo.

  1. Creamos 20 datasets aleatorios con 10 observaciones cada uno:
%macro doit;
  %do i = 1 %to 20;
    data zzdatos_&i.;
      do i = 1 to 10;
        output;
      end;
    run;
  %end;
%mend;

Un bucle fácil de macros ha generado 20 datasets que se llaman ZZDATOS_n. Recomiendo siempre emplear nombres «absurdos» para el trabajo con esta metodología.

  1. Empleamos un PROC SQL sobre la librería DICTIONARY, en concreto sobre la tabla tables.
proc sql noprint;
  select memname into :lista_tablas separated by " "
  from dictionary.tables
  where index(memname, "ZZDATO") > 0;
quit;

Recordemos que en SASHELP tenemos vistas de estas tablas, el SEPARATED BY es el que indica que hacemos una selección múltiple.

  1. Realizamos la unión:
data tablon;
  set &lista_tablas.;
run;

proc delete data=&lista_tablas.;
run;

Solo tenemos que emplear la macrovariable &lista_tablas. y podemos realizar cualquier operación con esta lista. Sé que soy un poco pesado con esta metodología pero me parece importante usarla porque puede ayudarnos a ahorrar código y automatizar procesos. Por supuesto si alguien tiene dudas, sugerencias o un trabajo sin «over time» (ahora se llama así a echar más horas que un tonto) ya sabe: rvaquerizo@analisisydecision.es