我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

SAS University Edition、OnDemand for Academics、どちらを使うべきか

SAS University Editionをただインストールしただけだと面白くないので、いろんな環境でSASを実行してみた結果を比べてみました。

 

 

比較のために実行したプログラムは以下です。

options nonotes nosource nofullstimer;
%let execcnt=10;

data processtime;
  delete;
run;

%Macro MST();
  data _null_ ;
    call symputx('STIME', datetime(),'G') ;
  run ;
%Mend;

%Macro MET(work);
  data tmp;
    length tm 8
           work $20
           env $20
           SASVER $20
           ;

    tm    =datetime() - &STIME.;
    work  ="&work.";
    ENV   ="&SYSSCPL.";
    SASVER="&SYSVLONG.";
    output;
  run ;
  data processtime;
    set processtime tmp;
  run ;
%MEnd;


/* DataStep */
%Macro Mtest1;
  %do x=1 %to &execcnt.;
    %MST;
    
    data loop(compress=yes);
      array var{1000} $10 var1-var1000;
      do i=1 to 100;
        do j=1 to 1000;
          var{j}=put(i,z5.)||put(j,z5.);
          output;
        end;
      end;
    run;
    %MET(data step);
  
  %end;
%MEnd;

/* PROC Sort */
%Macro Mtest2;
  %do x=1 %to &execcnt.;
    data sort(compress=no);
      length var1-var3 8;
      do i=1 to 1000000;
        var1=ranuni(i);
        var2=ranuni(i);
        var3=ranuni(i);
        output;
      end;
    run;
    %MST;
    proc sort data=sort;
      by var1;
    run;
    %MET(sort procedure);
  %end;
%Mend;

/* proc freq */
%Macro Mtest3;
  %do x=1 %to &execcnt.;
    
    data bw(compress=yes);
      set sashelp.bweight;
      select;
        when (      weight< 500) wgroup=1;
        when ( 500<=weight<1000) wgroup=2;
        when (1000<=weight<2000) wgroup=3;
        when (2000<=weight<3000) wgroup=4;
        when (3000<=weight<4000) wgroup=5;
        otherwise                wgroup=6;
      end;
    run;
    
    %MST;
    proc freq data=bw(obs=1000);
      tables wgroup*MomEDLevel*Married*MomSmoke;
      exact riskdiff(METHOD=SCORE);
    run;
    %MET(freq procedure);
  %end;
%Mend;


%Mtest1;
%Mtest2;
%Mtest3;

proc means data=processtime nway;
  class work;
  output out=out MEAN=MEAN STDERR= STDERR;
run;

 

比べたのは

  • データステップの処理時間
  • ソートの処理時間
  • freqプロシージャの処理時間

 

実行した環境は以下の4つ

(上の3つを勝手にSAS Studio系と呼びます)

 

処理時間の違いは以下の通りです。

 

まずはデータステップの実行時間

f:id:japelin:20180817025922p:plain

 

続いてソートの実行時間

f:id:japelin:20180817025955p:plain

 

最後に、freqの実行時間

f:id:japelin:20180817030048p:plain

 

誰がどう見てもわかると思いますが、PC版SASODAがほぼ同レベルで処理速度が速いです。使用PCがCorei7、メモリ16GB、SSDということを考えると、ODAが乗っているサーバのスペックは相当にいいものなのではないかと推測されます。

 

また、VirtualBoxで起動するローカルのUEはソートだけ遅いっていうのはなんででしょうか。ローカル環境なのでPC版SASと同等、というのは期待しすぎだったようです。

 

最後にAWSですが、全てにおいて平均を大幅に上回っており、かなり期待を裏切る結果となりました。

 

単純な実行時間としては以上なんですが、その他にも何点か。

  • fullstimerオプションで出力される、ログのタイムスタンプがPC版SASのみローカル時間(JST, UTC+9:00)で、その他はUTCが使われている。
  • ODAのみ、セッション開始時点でfullstimerオプションが有効となっている。
  • ODAは使用可能なプロダクトが多い
  • SAS Studio系にはコード支援機能がある
  • University Editionでは、大きいサイズのデータセットを扱えない?(およそ4GBのデータセットの生成に失敗する)

 

地味にコード支援機能は嬉しいです。

SASの拡張エディタは自動保存機能が貧弱、等幅フォントなのに揃わない、勝手にイタリックになる、コード支援、サジェスト機能がない、というものでした。

ですので私はエディタ(EmEditor)を使ってコーディングをしているのですが、コード支援、サジェスト機能がしっかり機能しているため、通常使う分にはエディタは使わず、SAS Studioでコーディングするのがいいかもしれません。

ただ、現状ではコードの折りたたみ機能がないため、今後の機能追加(というかPC版SASの拡張エディタには搭載されている)に期待したいところです。

 

 

最後に、(PC版SASは除き)無料で使用できるSASが3種類用意されているなかで何を選択すべきか、という点ですが、

  • ローカルでも使いたい/PCがそこそこ高性能→VirtualBoxSAS University Edition
  • ネット接続が前提/PCがボロい→ODA

ということになるかと思います。

 

現状ではUniversity Edition on AWSは処理が遅い、使用開始までのステップが長く、分かりづらい、という理由から、特別選択すべきものではない、といえます。

お金をかけてサーバのスペックを上げればもっと速度があがるのかもしれませんが、それならODA使ったほうが早いですよ、っと。