2013年12月13日金曜日

SQLの小技「CALCULATEDキーワード」


SASのSQL独自の便利機能「CALCULATED」キーワード
MySQLとかでは動かなかった。

このキーワードを使うと、SELECT句で作成した変数を、同じSQL内で参照することが出来る。


*** サンプルデータ ;
data DT1;
   do V1=1 to 3 ;
      output;
   end;
run;


*** 普通は以下のエラーが出る ;
proc sql;
  select sum(V1) as V2 ,
            V2+1 as V3
  from DT1;
quit;

ERROR: 次の列はテーブル内に存在しません: V2.


*** 「CALCULATED」を使った場合 ;
proc sql;
  select sum(V1) as V2,
           calculated V2+1 as V3
  from DT1;
quit;



正直この例だと、「sum(V1)+1 as V3」と書いてもいいけど、、
・「V2」の式が長文の場合、「V3」作る時にもう1回長文かく手間が省けていい。
・内部の処理効率的に「calculated」を使った方がいいのかも。

という理由で、個人的には「calculated」を愛用してる。

2 件のコメント:

  1. こんにちわ。
    CALCULATEDいいですよね!若干スペル自体が長いので略記法があればもっと普及するんじゃないかと思ってます。

    僕はよく
    proc sql;
    select V1,
    V1**2 as V2
    from DT1
    where calculated V2>3;
    quit;

    のようにselect句で導出した変数で、where抽出条件を組みたい際に多様していたんですが、上記の場合

    proc sql;
    select V1,
    V1**2 as V2
    from DT1
    having V2>3;
    quit;

    とhaving句でいけんじゃんと気付き、あんまり使ってなかったのですが、SELECT句では代用がないですし、積極的に使っていきます。


    返信削除
  2. こんにちは!
    おっしゃる通りですよねー。
    「CALC」ぐらいの指定だったら良かったのに。。といつも思います。

    他のメリットを考えると、CALCULATED使ってる方が後でプログラムを見た時に分かりやすいってとこでしょうか。

    返信削除