Учебники

SAS — объединение наборов данных

Несколько наборов данных SAS могут быть объединены на основе определенной общей переменной, чтобы получить один набор данных. Это делается с помощью оператора MERGE и оператора BY . Общее количество наблюдений в объединенном наборе данных часто меньше, чем сумма количества наблюдений в исходных наборах данных. Это связано с тем, что переменные из обоих наборов данных объединяются в одну запись на основе совпадения значения общей переменной.

Ниже приведены две предпосылки для объединения наборов данных:

  • входные наборы данных должны иметь хотя бы одну общую переменную для объединения.
  • входные наборы данных должны быть отсортированы по общей переменной (переменным), которая будет использоваться для объединения.

Синтаксис

Основной синтаксис для операторов MERGE и BY в SAS —

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

Ниже приведено описание используемых параметров:

  • Data-set1, Data-set2 — это имена наборов данных, записанные один за другим.

  • Общая переменная — это переменная, в зависимости от значений которой будут объединены наборы данных.

Data-set1, Data-set2 — это имена наборов данных, записанные один за другим.

Общая переменная — это переменная, в зависимости от значений которой будут объединены наборы данных.

Объединение данных

Давайте разберемся со слиянием данных на примере.

пример

Рассмотрим два набора данных SAS, один из которых содержит идентификатор сотрудника с именем и зарплатой, а другой — идентификатор сотрудника с идентификатором сотрудника и отделом. В этом случае, чтобы получить полную информацию для каждого сотрудника, мы можем объединить эти два набора данных. Окончательный набор данных будет по-прежнему иметь одно наблюдение на сотрудника, но он будет содержать как зарплату, так и переменные отдела.

# 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 

Вышеуказанный результат достигается с помощью следующего кода, в котором общая переменная (ID) используется в операторе BY. Обратите внимание, что наблюдения в обоих наборах данных уже отсортированы в столбце идентификаторов.

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;  

Отсутствующие значения в соответствующей колонке

Могут быть случаи, когда некоторые значения общей переменной не будут совпадать между наборами данных. В таких случаях наборы данных все еще объединяются, но в результате выдаются пропущенные значения.

пример

Рассмотрим случай, когда идентификатор 3 сотрудника отсутствует в наборе данных о заработной плате, а идентификатор 6 сотрудника отсутствует в наборе данных DEPT. Когда приведенный выше код применяется, мы получаем следующий результат.

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 

Слияние только матчей

Чтобы избежать пропущенных значений в результате, мы можем рассмотреть сохранение только наблюдений с совпадающими значениями для общей переменной. Это достигается с помощью оператора IN . Заявление о слиянии программы SAS необходимо изменить.

пример

В приведенном ниже примере значение IN = сохраняет только наблюдения, в которых совпадают значения из обоих наборов данных SALARY и DEPT .

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;  

После выполнения вышеуказанной программы SAS с измененной частью, полученной выше, мы получаем следующий вывод.