SAS連接數(shù)據(jù)集

2018-12-14 15:40 更新

可以使用SET語(yǔ)句連接多個(gè)SAS數(shù)據(jù)集以提供單個(gè)數(shù)據(jù)集。 在連接的數(shù)據(jù)集中的觀察的總數(shù)是原始數(shù)據(jù)集中的觀察的數(shù)量的總和。 觀察的順序是連續(xù)的。 來(lái)自第一數(shù)據(jù)集的所有觀察結(jié)果后面是來(lái)自第二數(shù)據(jù)集的所有觀察結(jié)果,并依此類推。

所有組合數(shù)據(jù)集具有相同的變量,但是如果它們具有不同數(shù)量的變量,則在結(jié)果中出現(xiàn)所有變量,對(duì)于較小數(shù)據(jù)集具有缺失值。

句法

SAS中SET語(yǔ)句的基本語(yǔ)法是:

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

以下是所使用的參數(shù)的說(shuō)明:

  • data-set1,data-set2是一個(gè)接一個(gè)寫(xiě)入的數(shù)據(jù)集名稱。

考慮在兩個(gè)不同數(shù)據(jù)集中可用的組織的員工數(shù)據(jù),一個(gè)用于IT部門(mén),另一個(gè)用于非IT部門(mén)。 要獲得所有員工的完整詳細(xì)信息,我們使用如下所示的SET語(yǔ)句連接兩個(gè)數(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;  

當(dāng)執(zhí)行上面的代碼,我們可以得到下面的輸出。

方案

當(dāng)我們?cè)谟糜诩?jí)聯(lián)的數(shù)據(jù)集中有許多變化時(shí),變量的結(jié)果可以不同,但是級(jí)聯(lián)數(shù)據(jù)集中的觀測(cè)值的總數(shù)總是每個(gè)數(shù)據(jù)集中的觀測(cè)值的總和。 我們將在下面考慮這種變化的許多情況。

不同數(shù)量的變量

如果原始數(shù)據(jù)集中的一個(gè)具有更多數(shù)量的變量而另一個(gè)數(shù)據(jù)集,則數(shù)據(jù)集仍然被組合,但是在較小的數(shù)據(jù)集中,這些變量顯示為缺失。

在下面的例子中,第一個(gè)數(shù)據(jù)集有一個(gè)名為DOJ的額外變量。 在結(jié)果中,第二個(gè)數(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;  

當(dāng)執(zhí)行上面的代碼,我們可以得到下面的輸出。

不同的變量名

在這種情況下,數(shù)據(jù)集具有相同數(shù)量的變量,但變量名在它們之間不同。 在這種情況下,正態(tài)連接將產(chǎn)生結(jié)果集中的所有變量,并給出不同的兩個(gè)變量的缺失結(jié)果。 雖然我們不能更改原始數(shù)據(jù)集中的變量名稱,但我們可以在我們創(chuàng)建的連接數(shù)據(jù)集中應(yīng)用RENAME函數(shù)。 這將產(chǎn)生與正常連接相同的結(jié)果,但是當(dāng)然使用一個(gè)新的變量名稱代替原始數(shù)據(jù)集中存在的兩個(gè)不同的變量名稱。

在下面的示例中,數(shù)據(jù)集ITDEPT具有變量名ename,而數(shù)據(jù)集NON_ITDEPT具有變量名empame。 但這兩個(gè)變量代表相同的類型(字符)。 我們?cè)赟ET語(yǔ)句中應(yīng)用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;  

當(dāng)執(zhí)行上面的代碼,我們可以得到下面的輸出。

不同的變量長(zhǎng)度

如果兩個(gè)數(shù)據(jù)集中的變量長(zhǎng)度不同,則連接的數(shù)據(jù)集將具有其中一些數(shù)據(jù)對(duì)于具有較小長(zhǎng)度的變量被截?cái)嗟闹怠?如果第一個(gè)數(shù)據(jù)集的長(zhǎng)度較小,就會(huì)發(fā)生這種情況。 為了解決這個(gè)問(wèn)題,我們對(duì)數(shù)據(jù)集應(yīng)用更高的長(zhǎng)度,如下所示。

在下面的示例中,變量ename在第一個(gè)數(shù)據(jù)集中的長(zhǎng)度為5,在第二個(gè)數(shù)據(jù)集中為7。 當(dāng)連接時(shí),我們應(yīng)用連接數(shù)據(jù)集中的LENGTH語(yǔ)句將枚舉長(zhǎng)度設(shè)置為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;  

當(dāng)執(zhí)行上面的代碼,我們可以得到下面的輸出。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)