SAS

GTLとsgplotの実行速度を比較する

GTLとsgplotはどちらも大体同じことができますが、実行速度に違いが出るのかを調べてみました。

テスト環境

使用したSAS

SAS university edition Release: 3.8 (Basic Edition)

テスト条件

同じデータセットを用いて散布図を500枚作成する。
ただし表題の末尾に連番を付与する。

これを5回繰り返し処理時間の平均を算出する。

<条件1>
GTL+dynamic variable

%macro test1;
   data _null_;
      call symputx("start", datetime());
   run;
   %do i=1 %to 500;
      proc sgrender data=ds1 template=mygraph;
         dynamic _NAME="テスト&i"
                 _TIME="TIME" 
                 _RESPONSE="RESPONSE";
   run;
   %end;

   data _null_;
   TIME=datetime()-&start.;
   putlog TIME=;
   run; 
%mend test1;

%test1;

<条件2>
GTL+マクロ変数
テンプレートを出力する度に上書き

%macro test2;
   data _null_;
      call symputx("start", datetime());
   run;
   %do i=1 %to 500;
      proc template;
      define statgraph mygraph;
      begingraph;
      entrytitle "テスト&i";
         layout overlay;
            scatterplot x=TIME y=RESPONSE;
         endlayout;
     endgraph;
     end;
     run;
      proc sgrender data=ds1 template=mygraph;
      run; 
   %end;
   data _null_;
      TIME=datetime()-&start.;
      putlog TIME=;
   run; 
%mend test2;

%test2;

<条件3>
sgplot

%macro test3;
   data _null_;
      call symputx("start", datetime());
   run;
   %do i=1 %to 500;
      proc sgplot data=ds1;
      title "テスト&i";
         scatter x=TIME y=RESPONSE;
      run;
   %end;
   data _null_;
      TIME=datetime()-&start.;
      putlog TIME=;
   run;
%mend test3;

%test3;

結果

全く変わりませんでした。

  • 条件1 55.96秒
  • 条件2 55.99秒
  • 条件3 55.88秒

dynamic variableを使って動的にグラフを生成する方法とマクロ変数を使ってテンプレートを毎回上書きする方法もほとんど差がありませんでした。

結局内部では3条件とも同じ処理が走っているのでしょうね。

もっと複雑な命令があれば多少変わるかもしれませんが、実行速度という意味ではGTLはsgplotに対して全く優位ではないようです。

既存のsgplotのコードをGTLに置き換える意味はないですね。