SAS - Fusionar conjuntos de datos

Se pueden combinar varios conjuntos de datos SAS en función de una variable común específica para obtener un único conjunto de datos. Esto se hace usando elMERGE declaración y BYdeclaración. El número total de observaciones en el conjunto de datos fusionado suele ser menor que la suma del número de observaciones en los conjuntos de datos originales. Esto se debe a que las variables de ambos conjuntos de datos se fusionan como un registro cuando hay una coincidencia en el valor de la variable común.

Hay dos requisitos previos para fusionar conjuntos de datos que se indican a continuación:

  • Los conjuntos de datos de entrada deben tener al menos una variable común para fusionar.
  • Los conjuntos de datos de entrada deben ordenarse por las variables comunes que se utilizarán para fusionar.

Sintaxis

La sintaxis básica para la declaración MERGE y BY en SAS es:

MERGE Data-Set 1 Data-Set 2
BY Common Variable

A continuación se muestra la descripción de los parámetros utilizados:

  • Data-set1,Data-set2 son nombres de conjuntos de datos escritos uno tras otro.

  • Common Variable es la variable basada en cuyos valores coincidentes se fusionarán los conjuntos de datos.

Fusión de datos

Entendamos la fusión de datos con la ayuda de un ejemplo.

Ejemplo

Considere dos conjuntos de datos SAS, uno que contiene la identificación del empleado con el nombre y el salario y otro que contiene la identificación del empleado con la identificación del empleado y el departamento. En este caso, para obtener la información completa de cada empleado, podemos fusionar estos dos conjuntos de datos. El conjunto de datos final seguirá teniendo una observación por empleado, pero contendrá las variables de salario y departamento.

# Data set 1	
ID NAME SALARY	
1 Rick 623.3		 
2 Dan 515.2 		
3 Mike 611.5 		
4 Ryan 729.1 
5 Gary 843.25 
6 Tusar 578.6 
7 Pranab 632.8 
8 Rasmi 722.5 

# Data set 2
ID DEPT
1 IT 
2 OPS
3 IT 
4 HR 
5 FIN 
6 IT 
7 OPS
8 FIN 

# Merged data set
ID NAME SALARY DEPT	
1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
3 Mike 611.5 	IT 	
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
6 Tusar 578.6   IT 
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN

El resultado anterior se logra utilizando el siguiente código en el que se usa la variable común (ID) en la declaración BY. Tenga en cuenta que las observaciones en ambos conjuntos de datos ya están ordenadas en la columna ID.

DATA SALARY; 
   INPUT empid name $ salary  ; 
DATALINES; 
1 Rick 623.3		 
2 Dan 515.2 		
3 Mike 611.5 		
4 Ryan 729.1 
5 Gary 843.25 
6 Tusar 578.6 
7 Pranab 632.8 
8 Rasmi 722.5 
;
RUN; 
DATA DEPT; 
   INPUT empid dEPT $ ; 
DATALINES; 
1 IT 
2 OPS
3 IT 
4 HR 
5 FIN 
6 IT 
7 OPS
8 FIN 
;
RUN; 
DATA All_details;
MERGE SALARY DEPT;
BY (empid);
RUN;
PROC PRINT DATA = All_details; 
RUN;

Valores perdidos en la columna coincidente

Puede haber casos en los que algunos valores de la variable común no coincidan entre los conjuntos de datos. En tales casos, los conjuntos de datos aún se fusionan pero dan valores faltantes en el resultado.

Ejemplo

Considere el caso de la ID de empleado 3 que falta en el salario del conjunto de datos y la ID de empleado 6 falta en el conjunto de datos de formulario DEPT. Cuando se aplica el código anterior, obtenemos el siguiente resultado.

ID NAME SALARY DEPT	
1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
3 .		.		IT
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
6 Tusar 578.6   .
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN

Fusionando solo las coincidencias

Para evitar los valores perdidos en el resultado, podemos considerar mantener solo las observaciones con valores coincidentes para la variable común. Eso se logra utilizando elINdeclaración. Es necesario cambiar la declaración de combinación del programa SAS.

Ejemplo

En el siguiente ejemplo, el IN= valor mantiene solo las observaciones donde los valores de ambos conjuntos de datos SALARY y DEPT partido.

DATA All_details;
MERGE SALARY(IN = a) DEPT(IN = b);
BY (empid);
IF a = 1 and b = 1;
RUN;
PROC PRINT DATA = All_details; 
RUN;

Tras la ejecución del programa SAS anterior con la parte modificada anterior, obtenemos el siguiente resultado.

1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN