【SAS/プログラミング】Merge。結合って思い通りにはいかないもの。

SASステートメント。Mergeのお話です。よく「マゲ」と読んだり、"e"を"a"と綴りを間違えることがあるよね!・・え、ない?こりゃまた失礼しました。(汗

結合には2種類あり、setステートメントは縦結合。ガン!ガン!って積み上がっていく感じですね。今回はMergeなので横結合です。キーとなる変数を元に重ねる感じでしょうか。

<program code>
data [作成データセット];
  merge [結合するデータセット1] [結合するデータセット2];
  by [キー変数];
run;
上記が基本コードです。

これで結合します。もし結合するデータセット1,2に同じ変数があった場合、右に記載のデータセットへと上書きされます。
上記だと[結合するデータセット2]になります。

ここから少しだけプラスアルファです。
・片方のデータセットのデータのみにしたい!(inオプション)
上記の<program code>を例にすると[結合するデータセット1]を元に出して、[結合するデータセット2]のみのデータはいらない場合です。

<program code>
data [作成データセット];
  merge [結合するデータセット1](in=変数A) [結合するデータセット2];
  by [キー変数];

  if [変数A];
run;
上記のように記載することで[結合するデータセット1]のみのデータに[結合するデータセット2]を結合する感じです。
はじめSASをしたときは違和感がありました。「if [変数A];?」と思いました。この(in=変数A) オプションがブーリアンフラグというもので、[結合するデータセット1]にフラグ=1をつけております。
なので、下記のように書いても問題ありません。というか省略系です。
if [変数A];→if [変数A]=1 ;

これでなんとなく納得、、かな。
割とよく使う手法です。横結合はよく思い通りにはいかないものなので、僕も実行して、「あれ?」と思った時に考えてます。


くぅ~、その時の記録を残しておけばよかった!!と後悔の日々です(笑い)思い出したら、また追加します!!

この記事が気に入ったらサポートをしてみませんか?