SAS - konkatenacja zbiorów danych

Wiele zestawów danych SAS może zostać połączonych w celu uzyskania jednego zestawu danych przy użyciu rozszerzenia SETkomunikat. Całkowita liczba obserwacji w połączonym zbiorze danych jest sumą liczby obserwacji w oryginalnych zbiorach danych. Kolejność obserwacji jest sekwencyjna. Po wszystkich obserwacjach z pierwszego zestawu danych następują wszystkie obserwacje z drugiego zestawu danych i tak dalej.

W idealnym przypadku wszystkie łączone zestawy danych mają te same zmienne, ale w przypadku gdy mają różną liczbę zmiennych, w wyniku pojawiają się wszystkie zmienne z brakami wartości dla mniejszego zestawu danych.

Składnia

Podstawowa składnia instrukcji SET w SAS to -

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

Poniżej znajduje się opis użytych parametrów -

  • data-set1,data-set2 to nazwy zbiorów danych zapisywane jedna po drugiej.

Przykład

Weź pod uwagę dane pracowników organizacji, które są dostępne w dwóch różnych zestawach danych, jednym dla działu IT, a drugim dla działu Non-It. Aby uzyskać pełne dane wszystkich pracowników, łączymy oba zestawy danych za pomocą instrukcji SET, jak pokazano poniżej.

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;

Po wykonaniu powyższego kodu otrzymujemy następujące dane wyjściowe.

Scenariusze

Kiedy mamy wiele odmian w zestawach danych do konkatenacji, wynik zmiennych może się różnić, ale całkowita liczba obserwacji w połączonym zestawie danych jest zawsze sumą obserwacji w każdym zestawie danych. Poniżej rozważymy wiele scenariuszy dotyczących tej odmiany.

Różna liczba zmiennych

Jeśli jeden z oryginalnych zestawów danych ma większą liczbę zmiennych niż inny, to zestawy danych nadal są łączone, ale w mniejszym zestawie danych te zmienne pojawiają się jako brakujące.

Przykład

W poniższym przykładzie pierwszy zestaw danych ma dodatkową zmienną o nazwie DOJ. W rezultacie wartość DOJ dla drugiego zestawu danych pojawi się jako brakująca.

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;

Po wykonaniu powyższego kodu otrzymujemy następujące dane wyjściowe.

Inna nazwa zmiennej

W tym scenariuszu zbiory danych mają taką samą liczbę zmiennych, ale nazwa zmiennej jest między nimi inna. W takim przypadku zwykła konkatenacja da w wyniku wszystkie zmienne w zestawie wyników i da brakujące wyniki dla dwóch zmiennych, które się różnią. Chociaż nie możemy zmienić nazwy zmiennej w oryginalnych zestawach danych, możemy zastosować funkcję RENAME w utworzonym przez nas połączonym zestawie danych. To da ten sam wynik, co zwykłe konkatenacje, ale oczywiście z jedną nową nazwą zmiennej zamiast dwóch różnych nazw zmiennych obecnych w pierwotnym zbiorze danych.

Przykład

W poniższym przykładzie zbiór danych ITDEPT ma nazwę zmiennej ename natomiast zbiór danych NON_ITDEPT ma nazwę zmiennej empname.Ale obie te zmienne reprezentują ten sam typ (znak). StosujemyRENAME funkcji w instrukcji SET, jak pokazano poniżej.

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;

Po wykonaniu powyższego kodu otrzymujemy następujące dane wyjściowe.

Różne długości o różnej długości

Jeśli zmienne długości w dwóch zestawach danych są różne, niż połączony zestaw danych będzie zawierał wartości, w których część danych zostanie obcięta dla zmiennej o mniejszej długości. Dzieje się tak, jeśli pierwszy zestaw danych ma mniejszą długość. Aby rozwiązać ten problem, zastosujemy większą długość do obu zestawów danych, jak pokazano poniżej.

Przykład

W poniższym przykładzie zmienna enamema długość 5 w pierwszym zestawie danych i 7 w drugim. Podczas konkatenacji stosujemy instrukcję LENGTH w połączonym zestawie danych, aby ustawić długość ename na 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;

Po wykonaniu powyższego kodu otrzymujemy następujące dane wyjściowe.