Sas-merging-data-sets
SAS-データセットのマージ
特定の共通変数に基づいて複数のSASデータセットをマージして、単一のデータセットを提供できます。 これは、 MERGE ステートメントと BY ステートメントを使用して行われます。 多くの場合、マージされたデータセットの観測値の総数は、元のデータセットの観測値の総数よりも少なくなります。 これは、共通変数の値に一致がある場合に、両方のデータセットの変数が1つのレコードとしてマージされるためです。
以下に示すデータセットをマージするための2つの前提条件があります-
- 入力データセットには、マージする少なくとも1つの共通変数が必要です。
- 入力データセットは、マージに使用される共通変数でソートする必要があります。
構文
SASのMERGEおよびBYステートメントの基本的な構文は次のとおりです-
MERGE Data-Set 1 Data-Set 2
BY Common Variable
以下は、使用されるパラメータの説明です-
- Data-set1、Data-set2 は、次々と書き込まれるデータセット名です。
- *共通変数*は、データセットがマージされる一致値に基づいた変数です。
データのマージ
例の助けを借りて、データのマージを理解しましょう。
例
2つのSASデータセットについて考えます。1つには名前と給与の従業員IDが含まれ、もう1つには従業員IDと部門の従業員IDが含まれます。 この場合、各従業員の完全な情報を取得するために、これら2つのデータセットをマージできます。 最終的なデータセットには、従業員ごとに1つの観測値が含まれますが、給与と部門の両方の変数が含まれます。
# 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
上記の結果は、BYステートメントで共通変数(ID)が使用されている次のコードを使用して実現されます。 両方のデータセットの観測値はすでに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;
一致する列の欠損値
共通変数の一部の値がデータセット間で一致しない場合があります。 そのような場合でも、データセットはマージされますが、結果に欠損値が含まれます。
例
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
一致のみをマージする
結果の欠損値を回避するために、共通変数の値が一致した観測のみを保持することを検討できます。 これは、 IN ステートメントを使用して実現されます。 SASプログラムのマージステートメントを変更する必要があります。
例
次の例では、* IN * =値は、データセット 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;
上記の変更された部分で上記の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