サンプルデータ
data DT1;
input A B$; cards; 1 aa 2 bb 3 cc ;
data DT2; input A C$; cards; 1 xx 3 yy ;
|
① 縦結合
proc ds2;
data OUT1 (overwrite=yes);
method run(); set DT1 DT2; end; enddata; run; quit;
|
SETステートメントはDATAステップと書き方も似てますが、内部の動きや結合結果も同じになるかは不明。
各自色々なパターンでテストしてみた上で利用したほうが良さそうです。
②横結合
DS2プロシジャでは、現状MERGEステートメントがありません。
ではどうやってデータの横結合を実現させるかというと、上のようにSETの中でSQL文を書きます。
②横結合
proc ds2;
data OUT2 (overwrite=yes); method run(); set { select coalesce(DT1.A, DT2.A) as A, B ,C from DT1 full join DT2 on DT1.A = DT2.A order by A };
end; enddata; run; quit;
|
DS2プロシジャでは、現状MERGEステートメントがありません。
ではどうやってデータの横結合を実現させるかというと、上のようにSETの中でSQL文を書きます。
SQL文なので当然、DATAステップのMERGEステートメントとは挙動が異なります。
これ面白いですよね。基本的にDS2プロシジャではSQLがキーワードになってきます。
通常のデータステップでもこの機能ほしいな~。
(2022/11/06: 追記)
これ面白いですよね。基本的にDS2プロシジャではSQLがキーワードになってきます。
通常のデータステップでもこの機能ほしいな~。
(2022/11/06: 追記)
SAS9.4M6から以下のように「DATAステップのMERGE」と似た横結合が出来るようです。
しかし、こちらもDATAステップのMERGEとは挙動が異なるようです。
MERGEステートメント + RETAINオプション
proc ds2; data OUT3 (overwrite=yes); method run(); merge DT1 DT2 / retain; by A; end; enddata; run; quit; |
詳細は以下データステップ100万回の記事を参照下さい。
通常のMergeとDS2のMergeは別物という話
DS2プロシジャ入門記事
1: 基本構文
2: 変数の宣言
3: 変数属性と配列の定義
4: データ型①
通常のMergeとDS2のMergeは別物という話
DS2プロシジャ入門記事
1: 基本構文
2: 変数の宣言
3: 変数属性と配列の定義
4: データ型①
third maintenance releaseで一応mergeステートメント追加されたみたいっすね(sas on demandでしかやったことないので確かめられないですが)
返信削除マニュアル見たら確かに追加されてました!知らなかったです!
返信削除今SAS ondemandで試してみようと思ったら何故か
「ERROR: BASE driver, invalid PRIMARYPATH value」
とかって出てDS2プロシジャ使えなくて試せてないですが、色々試して遊んでみたいと思います。
有難う御座います!
確かそれ、libs=workで通ったはずです。いつ頃からかそれつけないとERRORになる様になった気がします
削除おー、動きました!これはSAS ondemandだから出るERRORなんですかね。
削除早速DS2のmerge試してみたら、動いてくれて感動です。
しかも1対多のmergeはデータステップと異なる動きをしてますね。