Несколько наборов данных 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 с измененной частью, полученной выше, мы получаем следующий вывод.