SAS - Mesclar conjuntos de dados

Vários conjuntos de dados SAS podem ser mesclados com base em uma variável comum específica para fornecer um único conjunto de dados. Isso é feito usando oMERGE declaração e BYdeclaração. O número total de observações no conjunto de dados mesclado é frequentemente menor que a soma do número de observações nos conjuntos de dados originais. É porque as variáveis ​​de ambos os conjuntos de dados são mescladas como um registro com base quando há uma correspondência no valor da variável comum.

Existem dois pré-requisitos para mesclar conjuntos de dados fornecidos abaixo -

  • os conjuntos de dados de entrada devem ter pelo menos uma variável comum para se fundir.
  • os conjuntos de dados de entrada devem ser classificados pelas variáveis ​​comuns que serão usadas para a fusão.

Sintaxe

A sintaxe básica para a instrução MERGE e BY no SAS é -

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

A seguir está a descrição dos parâmetros usados ​​-

  • Data-set1,Data-set2 são nomes de conjuntos de dados escritos um após o outro.

  • Common Variable é a variável baseada em cujos valores correspondentes os conjuntos de dados serão mesclados.

Mesclagem de dados

Vamos entender a fusão de dados com a ajuda de um exemplo.

Exemplo

Considere dois conjuntos de dados SAS, um contendo a ID do funcionário com nome e salário e outro contendo a ID do funcionário com ID do funcionário e departamento. Neste caso, para obter as informações completas de cada funcionário, podemos mesclar esses dois conjuntos de dados. O conjunto de dados final ainda terá uma observação por funcionário, mas conterá as variáveis ​​de salário e 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

O resultado acima é obtido usando o código a seguir, no qual a variável comum (ID) é usada na instrução BY. Observe que as observações em ambos os conjuntos de dados já estão classificadas na coluna 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 ausentes na coluna de correspondência

Pode haver casos em que alguns valores da variável comum não coincidam entre os conjuntos de dados. Em tais casos, os conjuntos de dados ainda são mesclados, mas fornecem valores ausentes no resultado.

Exemplo

Considere o caso do ID do funcionário 3 ausente do salário do conjunto de dados e do ID do funcionário 6 ausente do conjunto de dados do formulário DEPT. Quando o código acima é aplicado, obtemos o resultado abaixo.

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

Mesclando apenas as correspondências

Para evitar os valores perdidos no resultado, podemos considerar manter apenas as observações com valores correspondentes para a variável comum. Isso é conseguido usando oINdeclaração. A instrução de mesclagem do programa SAS precisa ser alterada.

Exemplo

No exemplo abaixo, o IN= valor mantém apenas as observações onde os valores de ambos os conjuntos de dados SALARY e DEPT partida.

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;

Após a execução do programa SAS acima com a parte alterada acima, obtemos a seguinte saída.

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