SAS tiene una gran flexibilidad en cómo unir dos o más tablas. Es posible utilizar tanto el comando Merge, nativo del lenguaje SAS, como el comando Join en lenguaje SQL, a través de PROC SQL.
Cada uno de estos comandos tiene sus peculiaridades, ventajas y desventajas. Mostramos a continuación una tabla con un resumen de las principales diferencias encontradas en estos dos tipos de comandos, que pueden ayudarte a la hora de decidir cuál usar:
Tema |
Merge |
SQL Inner Join |
Números/tamaño del conjunto de datos |
No hay límite en el número o tamaño de las tablas que se unirán, a excepción del espacio en disco |
Número máximo de tablas en Join: 256 (SAS 9.4) |
Procesamiento de datos |
Secuencialmente, se unirán una a una las observaciones con valores repetidos en la(s) variable(s) definida(s) en el BY. (Sin duplicar registros) |
Genera producto cartesiano para observaciones con valores repetidos en la(s) variable(s) definida(s) en el BY. |
Guardar Datasets |
Posibilidad de crear múltiples Datasets con un solo paso data. |
Solo se puede crear un datasets por query. |
Datasets ordenados/indexados |
Requiere que los datasets de origen estén ordenados. |
No es necesario ordenar los datasets de origen. |
Variables con el mismo nombre |
La variable contenida en BY debe tener el mismo nombre en todos los conjuntos de datos de origen. |
Las variables clave en join no necesitan tener el mismo nombre. |
Paso Data – Merge - Ejemplo:
DATA ALL;
MERGE CAFE(IN=CAFEIN) SNACK(IN=SNACKIN) VENDING(IN=VENDIN);
BY NAME;
CIN=CAFEIN; SIN=SNACKIN; VIN=VENDIN;
RUN;
PROC SQL – JOIN: Ejemplo:
proc sql;
title 'All Flights for Each Supervisor';
select s.IdNum, Lname, City 'Hometown', Jobcat, Flight, Date
from proclib.schedule2 s, proclib.staff2 t, proclib.superv2 v
where s.idnum=t.idnum and t.idnum=v.supid;
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!