Sas-merging-data-sets

提供:Dev Guides
移動先:案内検索

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 * =値は、データセット SALARYDEPT の両方の値が一致する観測のみを保持します。

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