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 = "テスト1" ;
  G = 2 ; NOTE = "テスト2" ;
  G = 3 ; NOTE = "テスト3" ;
run ;

proc sql feedback ;
  create view V1 as
    select *
    from   TEST1
  ;
  create table TEST2 as
    select I+1 as I2
          ,V1.*
    from   V1
    left join IDX
    on        V1.G = IDX.G
    ;
quit ;

SQLビューがあると、その定義内容もログに表示されます。

 85         proc sql feedback ;
 86           create view V1 as
 87             select *
 88             from   TEST1
 89           ;
 NOTE: SQLビューは WORK.V1 定義されました。
 90           create table TEST2 as
 91             select I+1 as I2
 92                   ,V1.*
 93             from   V1
 94             left join IDX
 95             on        V1.G = IDX.G
 96             ;
 NOTE: Statement transforms to:
 
         select TEST1.I + 1 as I2, TEST1.STR, TEST1.I, TEST1.R, TEST1.G
           from ( select TEST1.STR, TEST1.I, TEST1.R, TEST1.G
                    from WORK.TEST1
                ) left outer join WORK.IDX on TEST1.G = IDX.G;
 
 NOTE: SASスレッドソートを使用します。
 NOTE: テーブルWORK.TEST2(行数100000、列数5)が作成されました。
 
 97         quit ;
 NOTE: PROCEDURE SQL処理(合計処理時間):
       処理時間           0.12 秒
       CPU時間            0.13 秒

テストコード 3 - proc sql feedback : DATA STEP ビューは展開されない

data TEST_V / view=TEST_V ;
  set TEST1 ;
  A = 1 ;
run ;

proc sql feedback ;
  create table TEST3 as
    select *
    from   TEST_V
    ;
quit ;

describe view でもそうでしたが、DATA STEPビューは展開されないようです。

 61         proc sql feedback ;
 62           create table TEST3 as
 63             select *
 64             from   TEST_V
 65             ;
 NOTE: Statement transforms to:
 
         select TEST_V.STR, TEST_V.I, TEST_V.R, TEST_V.G, TEST_V.A
           from WORK.TEST_V;
 
 NOTE: ビュー WORK.TEST_V.VIEW処理(合計処理時間):
       処理時間           0.06 秒
       CPU時間            0.07 秒
       
 NOTE: データセットWORK.TEST1から100,000オブザベーションを読み込みました。 
 NOTE: テーブルWORK.TEST3(行数100000、列数5)が作成されました。
 
 66         quit ;
 NOTE: PROCEDURE SQL処理(合計処理時間):
       処理時間           0.10 秒
       CPU時間            0.08 秒


参考サイト

  1. SQLプロシジャで「SELECT *」等の省略文をログに展開する。 | SAS忘備録

コメント

このブログの人気の投稿

日付フォーマットでない文字項目をSAS日付に変換するときにログ出力されるメッセージを抑制したい - SAS

データセット(.sas7bdatファイル)の文字コードを取得したい - SAS

Linuxコマンド: date で◯か月前 / ◯か月後を取得するときの注意