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

2018-12-14 17:13 更新

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

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

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

語法

SAS中的MERGE和BY語句的基本語法是:

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

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

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

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

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

# 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é)果通過使用以下代碼實現(xiàn),其中在BY語句中使用公共變量(ID)。 請注意,兩個數(shù)據(jù)集中的觀測值已在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ù)集仍然會合并,但在結(jié)果中給出缺失值。

考慮數(shù)據(jù)集工資中缺少員工ID:3的情況,以及員工ID:6缺少表單數(shù)據(jù)集DEPT。 當(dāng)應(yīng)用上述代碼時,得到以下結(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 

僅合并匹配項

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

在下面的示例中,IN =值僅保留來自數(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程序時,我們得到以下輸出。

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)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號