Sas-concatenate-data-sets
SAS-データセットの連結
*SET* ステートメントを使用して、複数のSASデータセットを連結して単一のデータセットを提供できます。 連結されたデータセットの観測値の総数は、元のデータセットの観測値の合計です。 観測の順序は連続しています。 最初のデータセットのすべての観測値の後に、2番目のデータセットのすべての観測値が続きます。
理想的には、すべての結合データセットに同じ変数がありますが、変数の数が異なる場合、結果にはすべての変数が表示され、より小さいデータセットの欠損値があります。
構文
SASのSETステートメントの基本的な構文は次のとおりです-
SET data-set 1 data-set 2 data-set 3.....;
以下は、使用されるパラメータの説明です-
- data-set1、data-set2 は、次々に書き込まれるデータセット名です。
例
IT部門用と非IT部門用の2つの異なるデータセットで利用可能な組織の従業員データを考えてみましょう。 すべての従業員の完全な詳細を取得するために、以下に示すSETステートメントを使用して両方のデータセットを連結します。
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;
上記のコードが実行されると、次の出力が得られます。
シナリオ
連結するデータセットに多くのバリエーションがある場合、変数の結果は異なる可能性がありますが、連結されたデータセットの観測値の合計数は常に各データセットの観測値の合計になります。 このバリエーションに関する多くのシナリオを以下で検討します。
異なる数の変数
元のデータセットの1つが他のデータセットよりも多くの変数を持っている場合、データセットは依然として結合されますが、小さいデータセットではこれらの変数は欠落しているように見えます。
例
以下の例では、最初のデータセットにDOJという名前の追加変数があります。 結果では、2番目のデータセットの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;
上記のコードが実行されると、次の出力が得られます。
異なる変数名
このシナリオでは、データセットの変数の数は同じですが、変数名は変数間で異なります。 その場合、通常の連結により結果セット内のすべての変数が生成され、異なる2つの変数の結果が欠落します。 元のデータセットの変数名を変更することはできませんが、作成した連結データセットにRENAME関数を適用できます。 通常の連結と同じ結果が得られますが、もちろん元のデータセットに存在する2つの異なる変数名の代わりに1つの新しい変数名が使用されます。
例
以下の例では、データセットITDEPTの変数名は ename で、データセット NON_ITDEPT の変数名は* empname。ですが、これらの変数は両方とも同じタイプ(文字)を表しています。 以下に示すように、SETステートメントで *RENAME 関数を適用します。
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;
上記のコードが実行されると、次の出力が得られます。
異なる可変長
2つのデータセットの変数の長さが異なる場合、連結されたデータセットの値は、長さが短い変数の一部のデータが切り捨てられます。 最初のデータセットの長さが短い場合に発生します。 これを解決するために、以下に示すように、両方のデータセットにより長い長さを適用します。
例
以下の例では、変数 ename の長さは、最初のデータセットでは5、2番目では7です。 連結する場合、連結されたデータセットにLENGTHステートメントを適用して、enameの長さを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;
上記のコードが実行されると、次の出力が得られます。