投稿

6月, 2016の投稿を表示しています

FedSQL プロシジャは、SQLプロシジャとどう違うの? - SAS

イメージ
データステップ100万回 SAS新手一生 さんにて、「 PROC SQL では LIMIT 句が使えない けどPROC FEDSQLでは使えるよ。ついでにOFFSET句も。の話 」を読んで、SQLプロシジャと FedSQL ってなにが違うんだろ、と疑問に思ったので少し調べてみました。そもそも、FedSQLプロシジャの存在すら知らない(汗。 そんなこんなで、個人的に気になったところを簡単にピックアップしてみます。 FedSQLプロシジャ とは? FedSQLプロシジャは、新しいデータタイプに対応し、(SAS9.4の時点で) ANSI SQL:1999 に準拠したSQL を記載することができます。 FesSQLプロシジャが準拠している ANSI SQL:1999 ですが、それ以降の ANSI SQL はもちろん準拠していません。例えば、ANSI SQL:2003 で追加になったウィンドウ関数 partition by などは残念ながらないです。 悲しい。 FedSQL の Fed は、たぶん、federal (連邦の) か federation (連邦政府) の略ですかね、、、知ってる方がいらっしゃたら教えて下さい。。。 一方、SQLプロシジャでは完全にANSIに準拠しているわけではなく、もともとのSASの動きぽいところと互換性をもたせています。ですので、OracleやらDB2を使っていた人からすると、違和感があるような記載方法や動作をしたりすることがあります。 では、FedSQLプロシジャとSQLプロシジャでどこが違うのか見ていきましょう。 null (欠損値) の扱い方 - マイナス無限 SAS忘備録 さんの「 SQLプロシジャ入門15:NULLの取扱い 」にて記載されていますが、DATAステップも含めて、SQLプロシジャでは、欠損値はマイナス無限みたいな扱いになっています。例えば、where句 で A < 10 みたいに絞り込みを実施すると、通常のSQLでは 欠損値は条件の対象外ですが、SQLプロシジャやDATAステップでは欠損値も含んでしまいます。 FedSQLプロシジャに、ansimodeオプションを付けると、ANSI準拠の動きになり、where句 で A < 10 みたいに絞り込みを実施したとき、欠損値を