投稿

ラベル(欠損値)が付いた投稿を表示しています

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

数値定数、SAS日付定数、SAS時間定数、SAS日時定数の表現方法

イメージ
数値定数、SAS日付定数、SAS時間定数、SAS日時定数の色々な書き方のご紹介です。 数値定数 title "数値定数" ; data TEST_NUM ; N = 1234 ; output ; N = -123 ; output ; N = +123 ; output ; N = 0010 ; output ; N = 0.123 ; output ; N = 1E10 ; output ; /* 指数表記 : 1 × 10の10乗 = 10000000000 */ N = 2.1E2 ; output ; /* 指数表記 : 2.1 × 10の 2乗 = 210 */ N = 1E-3 ; output ; /* 指数表記 : 2.1 × 10の-3乗 = 0.001 */ N = 2.5E-2 ; output ; /* 指数表記 : 2.5 × 10の-2乗 = 0.025 */ N = 0x ; output ; /* 16進数 : 10進数 0 */ N = 010x ; output ; /* 16進数 : 10進数 16 */ N = 0FFx ; output ; /* 16進数 : 10進数 255 */ N = 0FFFFx ; output ; /* 16進数 : 10進数 65535 */ N = . ; output ; /* 欠損値 */ N = .A ; output ; /* 特殊欠損値 A */ N = ._ ; output ; /* 特殊欠損値 _ */ run ; proc print data=TEST_NUM ; format N comma22.4 ; run ; SAS日付定数 title "SAS日付定数" ; data TEST_DATE ; DATE = '01JAN2015'd ; output ; /* 2015/01/01 */ DATE = '31AUG2015'd...

missingオプション - 数値欠損値の出力結果を . ドットから変更する - SAS

イメージ
数値の欠損値は、デフォルトで、. で出力されますが、別の文字にしたいときは、missingオプションを使うと、別の文字に変更することができます。値は、1文字だけ設定することができます。 options missing="M" ; data TEST ; length B $10. C $10. ; A = 1 ; B = "ABCDEFG" ; C = "123456" ; output ; A = 2 ; B = "09"x || "BBB" ; C = "1,2,3" ; output ; A = 3 ; B = "B," || "09"x || ",B" ; C = "" ; output ; A = . ; B = "" ; C = "" ; output ; run ; filename OUT "/folders/myfolders/test.txt" ; data _NULL_ ; set TEST ; file OUT dlm="09"x dsd ; put A ~ B ~ C ~ ; run ; これで、数値の欠損値の出力を変更することができました。しかし、特殊欠損値の場合は、変更されませんのでご注意ください。 options missing=" " ; data TEST1 ; A = . ; B = "" ; C = .M ; D = .A ; run ; filename OUT "/folders/myfolders/test1.txt" ; data _NULL_ ; set TEST1 ; file OUT dlm="09"x dsd ; put A ~ B ~ C ~ D ~ ; run ; 参考サイト...