OL、SEになる!おぼえがき★

関西人OL。SEの技術力獲得のためのおぼえがきまとめです!

SAS 基礎 縦結合(set)、横結合(merge)

  

Base sasの基本であるdataステップでよく使われる結合に関しての覚え書きです。

縦結合(set)は縦積みに、横結合(merge)は横方向に結合する処理構文です。

 

◎縦結合(set)

★基本構文★

 

data データセット名(出力);
  set データセット1(入力) データセット2(入力) ;         
run ;

 

★オプション★

・keep : 指定した変数を残す
drop : 指定した変数をはずす
・where : 条件を満たす変数のみ残す         
・if : 条件を満たす変数のみ残す

 

 ・sample1

f:id:omihosam:20161213225532p:plain

 ・sample2

f:id:omihosam:20161213225539p:plain

 

これらのデータセットを単純に結合すると、単純に縦積みしたデータセットができます。

data test1 ;
  set sample1 sample2 ;         
run ;

 ・test1

f:id:omihosam:20161213225556p:plain

 

本当にそのまま単純に縦積みで結合するので 「ichiro」という同じデータが重複していますが、削除されずそのまま縦に結合されます。

多くの場合はオプションつきで構文を使います。

 

◎「keep」を使うパターン

指定した変数のみを保持したい場合に使います。

data test2 ;
  set sample1 sample2 ;         
  keep name sex ;
run ;

 ・test2

f:id:omihosam:20161213225610p:plain

 

 ◎「drop」を使うパターン

 dropで指定した変数が削除されます(保持しない)

data test3 ;
  set sample1 sample2 ;         
  drop sex ;
run ;

・test3

f:id:omihosam:20161213225619p:plain

 

 ◎「where」を使うパターン

条件を満たすもののみ保持(残りは削除)

data test2 ;
  set sample1 sample2 ;         
  where sex = female ;
run ;

・test4

f:id:omihosam:20161213225718p:plain

 

 ◎「if」を使うパターン

whereと同様 条件を満たすもののみ保持。

data test2 ;
  set sample1 sample2 ;         
  if age >= 24 ;
run ;

・test5

f:id:omihosam:20161213230135p:plain

 

◎横結合(merge)

★基本構文★

data データセット名(出力);
  merge データセット1(入力) データセット2(入力) ;         
  by キー(結合の基準となる変数(複数可))
run ;

★オプション★

・keep : 指定した変数を残す
drop : 指定した変数をはずす
・where : 条件を満たす変数のみ残す         
・if : 条件を満たす変数のみ残す



 ・sample3

f:id:omihosam:20161213225532p:plain

 ・sample4

f:id:omihosam:20161214002537p:plain

  ・sample5

f:id:omihosam:20161214003329p:plain

mergeを使う上で必ず必要となってくることは、

結合するkeyでsortしておく必要があるということです。

 

 sample3とsample4を単純に結合すると。。

/** keyでソート **/
proc sort data = sample3 ;         
  by name ;
run ;
proc sort data = sample4 ;         
  by name ;
run ;

/** merge処理 **/
data test11 ;
merge sample3 sample4 ;         
  by name ;
run ;

・test11

f:id:omihosam:20161214002921p:plain

このように結合します。情報がない部分はNull(欠損値)となります。

 

次に、sample3とsample5をキー二つで結合してみます。

/** keyでソート **/
proc sort data = sample3 ;         
  by name ;
run ;
proc sort data = sample5 ;         
  by name ;
run ;

/** merge処理 **/
data test12 ;
merge sample3 sample5 ;         
  by name age ;
run ;

・test12

f:id:omihosam:20161214003340p:plain

このようにキーがすべて一致したものはすべての列に値が入ります。

オプションはset同様絞り込みや条件付きで結合する場合に使用します。