SAS - Concatenar conjuntos de datos

Se pueden concatenar varios conjuntos de datos SAS para obtener un único conjunto de datos utilizando el SETdeclaración. El número total de observaciones en el conjunto de datos concatenados es la suma del número de observaciones en los conjuntos de datos originales. El orden de las observaciones es secuencial. Todas las observaciones del primer conjunto de datos van seguidas de todas las observaciones del segundo conjunto de datos, y así sucesivamente.

Idealmente, todos los conjuntos de datos combinados tienen las mismas variables, pero en caso de que tengan un número diferente de variables, en el resultado aparecen todas las variables, con valores perdidos para el conjunto de datos más pequeño.

Sintaxis

La sintaxis básica para la instrucción SET en SAS es:

SET data-set 1 data-set 2 data-set 3.....;

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.

Ejemplo

Considere los datos de los empleados de una organización que están disponibles en dos conjuntos de datos diferentes, uno para el departamento de TI y otro para el departamento de Non-It. Para obtener los detalles completos de todos los empleados, concatenamos ambos conjuntos de datos utilizando la instrucción SET que se muestra a continuación.

DATA ITDEPT; 
   INPUT empid name $ salary  ; 
DATALINES; 
1 Rick 623.3 
3 Mike 611.5 
6 Tusar 578.6 
; 
RUN; 
DATA NON_ITDEPT; 
   INPUT empid name $ salary  ; 
DATALINES; 
2 Dan 515.2 
4 Ryan 729.1 
5 Gary 843.25 
7 Pranab 632.8 
8 Rasmi 722.5 
RUN; 
DATA All_Dept; 
   SET ITDEPT NON_ITDEPT; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

Cuando se ejecuta el código anterior, obtenemos el siguiente resultado.

Escenarios

Cuando tenemos muchas variaciones en los conjuntos de datos para la concatenación, el resultado de las variables puede diferir, pero el número total de observaciones en el conjunto de datos concatenados es siempre la suma de las observaciones en cada conjunto de datos. Consideraremos a continuación muchos escenarios sobre esta variación.

Diferente número de variables

Si uno de los conjuntos de datos originales tiene más variables que otro, los conjuntos de datos aún se combinan, pero en el conjunto de datos más pequeño esas variables aparecen como faltantes.

Ejemplo

En el siguiente ejemplo, el primer conjunto de datos tiene una variable adicional denominada DOJ. En el resultado, el valor de DOJ para el segundo conjunto de datos aparecerá como perdido.

DATA ITDEPT; 
   INPUT empid name $ salary DOJ date9.  ; 
DATALINES; 
1 Rick 623.3 02APR2001
3 Mike 611.5 21OCT2000
6 Tusar 578.6 01MAR2009  
; 
RUN; 
DATA NON_ITDEPT; 
   INPUT empid name $ salary  ; 
DATALINES; 
2 Dan 515.2 
4 Ryan 729.1 
5 Gary 843.25 
7 Pranab 632.8 
8 Rasmi 722.5 
RUN; 
DATA All_Dept; 
   SET ITDEPT NON_ITDEPT; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

Cuando se ejecuta el código anterior, obtenemos el siguiente resultado.

Nombre de variable diferente

En este escenario, los conjuntos de datos tienen el mismo número de variables pero el nombre de una variable difiere entre ellos. En ese caso, una concatenación normal producirá todas las variables en el conjunto de resultados y dará resultados faltantes para las dos variables que difieren. Si bien no podemos cambiar el nombre de la variable en los conjuntos de datos originales, podemos aplicar la función RENAME en el conjunto de datos concatenados que creamos. Eso producirá el mismo resultado que una concatenación normal pero, por supuesto, con un nuevo nombre de variable en lugar de dos nombres de variable diferentes presentes en el conjunto de datos original.

Ejemplo

En el siguiente ejemplo, el conjunto de datos ITDEPT tiene el nombre de variable ename mientras que el conjunto de datos NON_ITDEPT tiene el nombre de la variable empname.Pero ambas variables representan el mismo tipo (carácter). Aplicamos elRENAME función en la instrucción SET como se muestra a continuación.

DATA ITDEPT; 
   INPUT empid ename $ salary  ; 
DATALINES; 
1 Rick 623.3 
3 Mike 611.5 
6 Tusar 578.6 
; 
RUN; 
DATA NON_ITDEPT; 
   INPUT empid empname $ salary  ; 
DATALINES; 
2 Dan 515.2 
4 Ryan 729.1 
5 Gary 843.25 
7 Pranab 632.8 
8 Rasmi 722.5 
RUN; 
DATA All_Dept; 
   SET ITDEPT(RENAME =(ename = Employee) ) NON_ITDEPT(RENAME =(empname = Employee) ); 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

Cuando se ejecuta el código anterior, obtenemos el siguiente resultado.

Diferentes longitudes variables

Si la longitud de las variables en los dos conjuntos de datos es diferente a la del conjunto de datos concatenados, tendrá valores en los que algunos datos se truncan para la variable con una longitud menor. Ocurre si el primer conjunto de datos tiene una longitud menor. Para resolver esto, aplicamos la mayor longitud a ambos conjuntos de datos como se muestra a continuación.

Ejemplo

En el siguiente ejemplo, la variable enametiene una longitud de 5 en el primer conjunto de datos y 7 en el segundo. Al concatenar, aplicamos la instrucción LENGTH en el conjunto de datos concatenados para establecer la longitud del esmalte en 7.

DATA ITDEPT; 
   INPUT  empid 1-2 ename $ 3-7 salary 8-14  ; 
DATALINES; 
1 Rick  623.3 
3 Mike  611.5 
6 Tusar 578.6 
; 
RUN;
DATA NON_ITDEPT; 
   INPUT  empid 1-2 ename $ 3-9  salary 10-16 ; 
DATALINES; 
2 Dan    515.2 
4 Ryan   729.1 
5 Gary   843.25
7 Pranab 632.8 
8 Rasmi  722.5 
RUN; 
DATA All_Dept; 
   LENGTH ename $ 7   ;
   SET ITDEPT  NON_ITDEPT ; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

Cuando se ejecuta el código anterior, obtenemos el siguiente resultado.