SAS合并數(shù)據(jù)集

2018-12-14 17:13 更新

可以基于特定的公共變量合并多個(gè)SAS數(shù)據(jù)集以給出單個(gè)數(shù)據(jù)集。 這是使用MERGE語(yǔ)句和BY語(yǔ)句完成的。 合并數(shù)據(jù)集中的觀察的總數(shù)通常小于原始數(shù)據(jù)集中的觀察的數(shù)量的總和。 這是因?yàn)楫?dāng)公共變量的值存在匹配時(shí),變量形成兩個(gè)數(shù)據(jù)集合被合并為一個(gè)記錄。

下面給出了合并數(shù)據(jù)集的兩個(gè)先決條件:

  • 輸入數(shù)據(jù)集必須至少有一個(gè)要合并的公用變量。
  • 輸入數(shù)據(jù)集必須按照將用于合并的公共變量排序。

語(yǔ)法

SAS中的MERGE和BY語(yǔ)句的基本語(yǔ)法是:

MERGE Data-Set 1 Data-Set 2
BY Common Variable

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

  • Data-set1Data-set2是一個(gè)接一個(gè)寫(xiě)入的數(shù)據(jù)集名稱。
  • 公共變量是基于其匹配值的數(shù)據(jù)集合將被合并的變量。

數(shù)據(jù)合并的例子

考慮兩個(gè)SAS數(shù)據(jù)集,一個(gè)包含具有名稱和工資的雇員ID,另一個(gè)包含具有雇員ID和部門(mén)的雇員ID。 在這種情況下,為了獲得每個(gè)員工的完整信息,我們可以合并這兩個(gè)數(shù)據(jù)集。 最終數(shù)據(jù)集仍將對(duì)每個(gè)員工有一個(gè)觀察值,但它將包含薪水和部門(mén)變量。

# Data set 1	
ID NAME SALARY	
1 Rick 623.3		 
2 Dan 515.2 		
3 Mike 611.5 		
4 Ryan 729.1 
5 Gary 843.25 
6 Tusar 578.6 
7 Pranab 632.8 
8 Rasmi 722.5 

# Data set 2
ID DEPT
1 IT 
2 OPS
3 IT 
4 HR 
5 FIN 
6 IT 
7 OPS
8 FIN 

# Merged data set
ID NAME SALARY DEPT	
1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
3 Mike 611.5 	IT 	
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
6 Tusar 578.6   IT 
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN 

上述結(jié)果通過(guò)使用以下代碼實(shí)現(xiàn),其中在BY語(yǔ)句中使用公共變量(ID)。 請(qǐng)注意,兩個(gè)數(shù)據(jù)集中的觀測(cè)值已在ID列中排序。

DATA SALARY; 
  INPUT empid name $ salary  ; 
DATALINES; 
1 Rick 623.3		 
2 Dan 515.2 		
3 Mike 611.5 		
4 Ryan 729.1 
5 Gary 843.25 
6 Tusar 578.6 
7 Pranab 632.8 
8 Rasmi 722.5 
;
RUN; 
DATA DEPT; 
  INPUT empid dEPT $ ; 
DATALINES; 
1 IT 
2 OPS
3 IT 
4 HR 
5 FIN 
6 IT 
7 OPS
8 FIN 
;
RUN; 
DATA All_details;
MERGE SALARY DEPT;
BY (empid);
RUN;
PROC PRINT DATA=All_details; 
RUN;  

匹配列中缺少值

可能存在公共變量的一些值在數(shù)據(jù)集之間不匹配的情況。 在這種情況下,數(shù)據(jù)集仍然會(huì)合并,但在結(jié)果中給出缺失值。

考慮數(shù)據(jù)集工資中缺少員工ID:3的情況,以及員工ID:6缺少表單數(shù)據(jù)集DEPT。 當(dāng)應(yīng)用上述代碼時(shí),得到以下結(jié)果。

ID NAME SALARY DEPT	
1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
3 .		.		IT
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
6 Tusar 578.6   .
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN 

僅合并匹配項(xiàng)

為了避免結(jié)果中的缺失值,我們可以考慮僅保留具有公共變量的匹配值的觀察值。 這是通過(guò)使用IN語(yǔ)句實(shí)現(xiàn)的。 SAS程序的merge語(yǔ)句需要更改。

在下面的示例中,IN =值僅保留來(lái)自數(shù)據(jù)集SALARY和DEPT的值匹配的觀察值。

DATA All_details;
MERGE SALARY(IN=a) DEPT(IN=b);
BY (empid);
IF a=1 and b=1;
RUN;
PROC PRINT DATA=All_details; 
RUN;  

在執(zhí)行具有上述改變的部分的SAS程序時(shí),我們得到以下輸出。

1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN 

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)