SAS 基礎 縦結合(set)、横結合(merge)
Base sasの基本であるdataステップでよく使われる結合に関しての覚え書きです。
縦結合(set)は縦積みに、横結合(merge)は横方向に結合する処理構文です。
◎縦結合(set)
★基本構文★
★オプション★
・keep : 指定した変数を残す
・drop : 指定した変数をはずす
・where : 条件を満たす変数のみ残す
・if : 条件を満たす変数のみ残す
・sample1
・sample2
これらのデータセットを単純に結合すると、単純に縦積みしたデータセットができます。
data test1 ;
set sample1 sample2 ;
run ;
・test1
本当にそのまま単純に縦積みで結合するので 「ichiro」という同じデータが重複していますが、削除されずそのまま縦に結合されます。
多くの場合はオプションつきで構文を使います。
◎「keep」を使うパターン
指定した変数のみを保持したい場合に使います。
data test2 ;
set sample1 sample2 ;
keep name sex ;
run ;
・test2
◎「drop」を使うパターン
dropで指定した変数が削除されます(保持しない)
data test3 ;
set sample1 sample2 ;
drop sex ;
run ;
・test3
◎「where」を使うパターン
条件を満たすもののみ保持(残りは削除)
data test2 ;
set sample1 sample2 ;
where sex = female ;
run ;
・test4
◎「if」を使うパターン
whereと同様 条件を満たすもののみ保持。
data test2 ;
set sample1 sample2 ;
if age >= 24 ;
run ;
・test5
◎横結合(merge)
★基本構文★
★オプション★
・keep : 指定した変数を残す
・drop : 指定した変数をはずす
・where : 条件を満たす変数のみ残す
・if : 条件を満たす変数のみ残す
・sample3
・sample4
・sample5
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
このように結合します。情報がない部分は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
このようにキーがすべて一致したものはすべての列に値が入ります。
オプションはset同様絞り込みや条件付きで結合する場合に使用します。