SAS - ชุดข้อมูลเชื่อมต่อกัน

ชุดข้อมูล SAS หลายชุดสามารถเชื่อมต่อกันเพื่อให้ชุดข้อมูลเดียวโดยใช้ SETคำให้การ. จำนวนการสังเกตทั้งหมดในชุดข้อมูลที่เรียงต่อกันคือผลรวมของจำนวนข้อสังเกตในชุดข้อมูลดั้งเดิม ลำดับของการสังเกตเป็นลำดับ การสังเกตทั้งหมดจากชุดข้อมูลแรกตามด้วยการสังเกตทั้งหมดจากชุดข้อมูลที่สองและอื่น ๆ

ตามหลักการแล้วชุดข้อมูลที่รวมทั้งหมดมีตัวแปรเหมือนกัน แต่ในกรณีที่มีจำนวนตัวแปรต่างกันตัวแปรทั้งหมดจะปรากฏขึ้นพร้อมกับค่าที่ขาดหายไปสำหรับชุดข้อมูลที่เล็กกว่า

ไวยากรณ์

ไวยากรณ์พื้นฐานสำหรับคำสั่ง SET ใน SAS คือ -

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

ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์ที่ใช้ -

  • 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;

เมื่อดำเนินการโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้

สถานการณ์

เมื่อเรามีหลายรูปแบบในชุดข้อมูลสำหรับการเรียงต่อกันผลลัพธ์ของตัวแปรอาจแตกต่างกันได้ แต่จำนวนการสังเกตทั้งหมดในชุดข้อมูลที่เรียงต่อกันจะเป็นผลรวมของการสังเกตในแต่ละชุดข้อมูลเสมอ เราจะพิจารณาสถานการณ์ต่างๆด้านล่างเกี่ยวกับรูปแบบนี้

จำนวนตัวแปรที่แตกต่างกัน

หากชุดข้อมูลเดิมชุดหนึ่งมีจำนวนตัวแปรมากกว่าอีกชุดข้อมูลจะยังคงรวมเข้าด้วยกัน แต่ในชุดข้อมูลที่เล็กกว่านั้นตัวแปรเหล่านั้นจะปรากฏว่าขาดหายไป

ตัวอย่าง

ในตัวอย่างด้านล่างชุดข้อมูลแรกมีตัวแปรพิเศษชื่อ 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;

เมื่อดำเนินการโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้

ชื่อตัวแปรที่แตกต่างกัน

ในสถานการณ์สมมตินี้ชุดข้อมูลมีจำนวนตัวแปรเท่ากัน แต่ชื่อตัวแปรต่างกัน ในกรณีนั้นการเรียงต่อกันตามปกติจะสร้างตัวแปรทั้งหมดในชุดผลลัพธ์และให้ผลลัพธ์ที่ขาดหายไปสำหรับตัวแปรทั้งสองที่แตกต่างกัน แม้ว่าเราจะไม่สามารถเปลี่ยนชื่อตัวแปรในชุดข้อมูลเดิมได้ แต่เราสามารถใช้ฟังก์ชัน 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;

เมื่อดำเนินการโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้

ความยาวตัวแปรต่างกัน

หากความยาวตัวแปรในชุดข้อมูลสองชุดแตกต่างจากชุดข้อมูลที่ต่อกันจะมีค่าที่ข้อมูลบางส่วนถูกตัดทอนสำหรับตัวแปรที่มีความยาวน้อยกว่า จะเกิดขึ้นหากชุดข้อมูลแรกมีความยาวน้อยกว่า ในการแก้ปัญหานี้เราใช้ความยาวที่สูงขึ้นกับชุดข้อมูลทั้งสองดังที่แสดงด้านล่าง

ตัวอย่าง

ในตัวอย่างด้านล่างตัวแปร enameมีความยาว 5 ในชุดข้อมูลแรกและ 7 ในชุดที่สอง เมื่อเชื่อมต่อกันเราใช้คำสั่ง LENGTH ในชุดข้อมูลที่ต่อกันเพื่อตั้งค่าความยาวเคลือบเป็น 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;

เมื่อดำเนินการโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้