SAS - Tập hợp dữ liệu kết hợp

Nhiều tập dữ liệu SAS có thể được nối để tạo ra một tập dữ liệu duy nhất bằng cách sử dụng SETtuyên bố. Tổng số quan sát trong tập dữ liệu nối là tổng số quan sát trong tập dữ liệu gốc. Thứ tự các quan sát là tuần tự. Tất cả các quan sát từ tập dữ liệu đầu tiên được theo sau bởi tất cả các quan sát từ tập dữ liệu thứ hai, v.v.

Lý tưởng nhất là tất cả các tập dữ liệu kết hợp đều có các biến giống nhau, nhưng trong trường hợp chúng có số lượng biến khác nhau, thì kết quả là tất cả các biến sẽ xuất hiện, thiếu giá trị cho tập dữ liệu nhỏ hơn.

Cú pháp

Cú pháp cơ bản cho câu lệnh SET trong SAS là:

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

Sau đây là mô tả về các tham số được sử dụng:

  • data-set1,data-set2 là các tên tập dữ liệu được viết nối tiếp nhau.

Thí dụ

Hãy xem xét dữ liệu nhân viên của một tổ chức có sẵn trong hai tập dữ liệu khác nhau, một cho bộ phận CNTT và một cho bộ phận Không phải của nó. Để có được chi tiết đầy đủ của tất cả các nhân viên, chúng tôi nối cả hai tập dữ liệu bằng cách sử dụng câu lệnh SET được hiển thị như bên dưới.

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;

Khi đoạn mã trên được thực thi, chúng ta nhận được kết quả sau.

Các tình huống

Khi chúng ta có nhiều biến thể trong tập dữ liệu để ghép, kết quả của các biến có thể khác nhau nhưng tổng số quan sát trong tập dữ liệu được ghép luôn là tổng số quan sát trong mỗi tập dữ liệu. Chúng tôi sẽ xem xét bên dưới nhiều tình huống về biến thể này.

Số lượng biến khác nhau

Nếu một trong các tập dữ liệu ban đầu có nhiều biến hơn thì các biến khác, thì các tập dữ liệu vẫn được kết hợp nhưng trong tập dữ liệu nhỏ hơn, các biến đó xuất hiện như bị thiếu.

Thí dụ

Trong ví dụ dưới đây, tập dữ liệu đầu tiên có một biến phụ có tên là DOJ. Kết quả là giá trị DOJ cho tập dữ liệu thứ hai sẽ xuất hiện như bị thiếu.

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;

Khi đoạn mã trên được thực thi, chúng ta nhận được kết quả sau.

Tên biến khác

Trong trường hợp này, các tập dữ liệu có cùng số lượng biến nhưng tên biến khác nhau giữa chúng. Trong trường hợp đó, một phép ghép thông thường sẽ tạo ra tất cả các biến trong tập kết quả và đưa ra kết quả bị thiếu cho hai biến khác nhau. Mặc dù chúng ta không thể thay đổi tên biến trong các tập dữ liệu gốc, chúng ta có thể áp dụng hàm RENAME trong tập dữ liệu nối mà chúng ta tạo. Điều đó sẽ tạo ra kết quả tương tự như một phép ghép thông thường nhưng tất nhiên là với một tên biến mới thay cho hai tên biến khác nhau có trong tập dữ liệu ban đầu.

Thí dụ

Trong tập dữ liệu ví dụ dưới đây ITDEPT có tên biến ename trong khi tập dữ liệu NON_ITDEPT có tên biến empname.Nhưng cả hai biến này đều đại diện cho cùng một kiểu (ký tự). Chúng tôi áp dụngRENAME trong câu lệnh SET như hình dưới đây.

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;

Khi đoạn mã trên được thực thi, chúng ta nhận được kết quả sau.

Độ dài biến đổi khác nhau

Nếu độ dài biến trong hai tập dữ liệu khác với tập dữ liệu được nối sẽ có các giá trị trong đó một số dữ liệu bị cắt bớt cho biến có độ dài nhỏ hơn. Nó xảy ra nếu tập dữ liệu đầu tiên có độ dài nhỏ hơn. Để giải quyết vấn đề này, chúng tôi áp dụng độ dài cao hơn cho cả tập dữ liệu như hình dưới đây.

Thí dụ

Trong ví dụ dưới đây, biến enamecó độ dài 5 trong tập dữ liệu đầu tiên và 7 trong tập dữ liệu thứ hai. Khi nối chúng ta áp dụng câu lệnh LENGTH trong tập dữ liệu đã nối để đặt độ dài ename thành 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;

Khi đoạn mã trên được thực thi, chúng ta nhận được kết quả sau.