Учебники

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

Несколько наборов данных SAS могут быть объединены для получения одного набора данных с помощью оператора SET . Общее количество наблюдений в объединенном наборе данных является суммой количества наблюдений в исходных наборах данных. Порядок наблюдений является последовательным. За всеми наблюдениями из первого набора данных следуют все наблюдения из второго набора данных и т. Д.

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

Синтаксис

Основной синтаксис для оператора SET в SAS –

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

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

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

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

пример

Рассмотрим данные о сотрудниках организации, которые доступны в двух разных наборах данных: один для ИТ-отдела, а другой для не-ИТ-отдела. Чтобы получить полную информацию обо всех сотрудниках, мы объединяем оба набора данных с помощью инструкции SET, показанной ниже.

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;  

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

concateate1

Сценарии

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

Разное количество переменных

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

пример

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

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;  

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

concateate2

Другое имя переменной

В этом сценарии наборы данных имеют одинаковое количество переменных, но имя переменной отличается между ними. В этом случае нормальная конкатенация произведет все переменные в наборе результатов и даст недостающие результаты для двух переменных, которые отличаются. Хотя мы не можем изменить имя переменной в исходных наборах данных, мы можем применить функцию RENAME в объединенном наборе данных, который мы создаем. Это даст тот же результат, что и при обычной конкатенации, но, конечно, с одним новым именем переменной вместо двух разных имен переменных, присутствующих в исходном наборе данных.

пример

В приведенном ниже примере набора данных ITDEPT имеет имя переменной ename, тогда как набор данных NON_ITDEPT имеет имя переменной empname. Но обе эти переменные представляют один и тот же тип (символ). Мы применяем функцию RENAME в операторе SET, как показано ниже.

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;  

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

concateate3

Различные переменные длины

Если длины переменных в двух наборах данных отличаются, то объединенный набор данных будет иметь значения, в которых некоторые данные усекаются для переменной с меньшей длиной. Это происходит, если первый набор данных имеет меньшую длину. Чтобы решить эту проблему, мы применяем большую длину к обоим наборам данных, как показано ниже.

пример

В приведенном ниже примере переменная ename имеет длину 5 в первом наборе данных и 7 во втором. При конкатенации мы применяем оператор LENGTH в конкатенированном наборе данных, чтобы установить длину ename равной 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;  

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