可以使用SET語句連接多個SAS數(shù)據(jù)集以提供單個數(shù)據(jù)集。 在連接的數(shù)據(jù)集中的觀察的總數(shù)是原始數(shù)據(jù)集中的觀察的數(shù)量的總和。 觀察的順序是連續(xù)的。 來自第一數(shù)據(jù)集的所有觀察結果后面是來自第二數(shù)據(jù)集的所有觀察結果,并依此類推。
所有組合數(shù)據(jù)集具有相同的變量,但是如果它們具有不同數(shù)量的變量,則在結果中出現(xiàn)所有變量,對于較小數(shù)據(jù)集具有缺失值。
SAS中SET語句的基本語法是:
SET data-set 1 data-set 2 data-set 3.....;
以下是所使用的參數(shù)的說明:
考慮在兩個不同數(shù)據(jù)集中可用的組織的員工數(shù)據(jù),一個用于IT部門,另一個用于非IT部門。 要獲得所有員工的完整詳細信息,我們使用如下所示的SET語句連接兩個數(shù)據(jù)集。
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;
當執(zhí)行上面的代碼,我們可以得到下面的輸出。
當我們在用于級聯(lián)的數(shù)據(jù)集中有許多變化時,變量的結果可以不同,但是級聯(lián)數(shù)據(jù)集中的觀測值的總數(shù)總是每個數(shù)據(jù)集中的觀測值的總和。 我們將在下面考慮這種變化的許多情況。
如果原始數(shù)據(jù)集中的一個具有更多數(shù)量的變量而另一個數(shù)據(jù)集,則數(shù)據(jù)集仍然被組合,但是在較小的數(shù)據(jù)集中,這些變量顯示為缺失。
在下面的例子中,第一個數(shù)據(jù)集有一個名為DOJ的額外變量。 在結果中,第二個數(shù)據(jù)集的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;
當執(zhí)行上面的代碼,我們可以得到下面的輸出。
在這種情況下,數(shù)據(jù)集具有相同數(shù)量的變量,但變量名在它們之間不同。 在這種情況下,正態(tài)連接將產(chǎn)生結果集中的所有變量,并給出不同的兩個變量的缺失結果。 雖然我們不能更改原始數(shù)據(jù)集中的變量名稱,但我們可以在我們創(chuàng)建的連接數(shù)據(jù)集中應用RENAME函數(shù)。 這將產(chǎn)生與正常連接相同的結果,但是當然使用一個新的變量名稱代替原始數(shù)據(jù)集中存在的兩個不同的變量名稱。
在下面的示例中,數(shù)據(jù)集ITDEPT具有變量名ename,而數(shù)據(jù)集NON_ITDEPT具有變量名empame。 但這兩個變量代表相同的類型(字符)。 我們在SET語句中應用RENAME函數(shù),如下所示。
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;
當執(zhí)行上面的代碼,我們可以得到下面的輸出。
如果兩個數(shù)據(jù)集中的變量長度不同,則連接的數(shù)據(jù)集將具有其中一些數(shù)據(jù)對于具有較小長度的變量被截斷的值。 如果第一個數(shù)據(jù)集的長度較小,就會發(fā)生這種情況。 為了解決這個問題,我們對數(shù)據(jù)集應用更高的長度,如下所示。
在下面的示例中,變量ename在第一個數(shù)據(jù)集中的長度為5,在第二個數(shù)據(jù)集中為7。 當連接時,我們應用連接數(shù)據(jù)集中的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;
當執(zhí)行上面的代碼,我們可以得到下面的輸出。
更多建議: