投稿

ラベル(proc sql)が付いた投稿を表示しています

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 みたいに絞り込みを実施したとき、欠損値を...

proc sql feedback - select句 * を展開したり、SASビューの定義をログに表示する - SAS

proc sql の feedback オプションについてのご紹介です。 テストコード 1 - proc sql feedback options msglevel=i ; /* テストデータ */ data TEST ; STR = "TEST" ; do I=1 to 1E5 ; R = ranuni(1) ; G = mod(I, 10) ; output ; end ; run ; %let TABLE_NAME = TEST ; proc sql feedback ; create table TEST1 as select * from &TABLE_NAME. /* コメント */ ; quit ; NOTE: Statement transforms to: の後に、SELECT句の * が展開された形で、SELECT文がログに表示されます。マクロ変数も展開され、コメントは削除されます。 71 proc sql feedback ; 72 create table TEST1 as 73 select * 74 from &TABLE_NAME. /* コメント */ 75 ; NOTE: Statement transforms to: select TEST.STR, TEST.I, TEST.R, TEST.G from WORK.TEST; NOTE: テーブルWORK.TEST1(行数100000、列数4)が作成されました。 76 quit ; NOTE: PROCEDURE SQL処理(合計処理時間): 処理時間 0.03 秒 CPU時間 0.04 秒 テストコード 2 - proc sql feedback : SQLビューを表示できます。 /* テストデータ2 */ data IDX ; G = 1 ; NOTE = "...

proc sql ; describe ステートメント - データセットの定義内容をログに出力する - SAS

イメージ
proc sql で使用する describe ステートメントは、データセットの定義内容をログに表示するステートメントです。proc contents のログに表示するバージョンみたいな感じです。 1. describe table テストコード - create table create table で作成したデータセットに対して、describe ステートメントを使ってみます。 options msglevel=i ; proc sql noprint ; create table TEST1 ( A decimal ,B char(30) ,C varchar(10) ,D numeric ,E float ) ; describe table TEST1 ; quit ; 59 proc sql noprint ; 60 create table TEST1 61 ( 62 A decimal 63 ,B char(30) 64 ,C varchar(10) 65 ,D numeric 66 ,E float 67 ) 68 ; NOTE: テーブルWORK.TEST1(行数0、列数5)が作成されました。 69 describe table TEST1 ; NOTE: SQLテーブルWORK.TEST1は次のように作成されました: create table WORK.TEST1( bufsize=65536 ) ( A num, B char(30), C char(10), D num, E num ); 70 quit ; NOTE: PROCEDURE SQL処理(合計処理時間): 処理時間 0.02 秒 CPU時間 0.03 秒 文字項目はすべて c...