2016年12月19日月曜日

SASでクリスマスツリーを描画する2


去年書いた記事 「SASでクリスマスツリーを描いてみる」 を少し進化させてみました。
雪だるまと雪をunicodeで取得して、雪をチラチラさせるアニメーションを追加しました。




以下「The DO Loop」という有名なSASブログでも雪が舞い落ちるアニメーションをSASで作るプログラムを公開していて、面白いです。
「Animate snowfall in SAS」
http://blogs.sas.com/content/iml/2016/12/14/animate-snow-sas.html

今回こちらとちょっと内容被っちゃった上、私のやつの方がショボイです。。


以下が今回作ったプログラムです。一応SAS9.4で動作します。
*** ツリーとゆき描画用データ作成 ;
data SNOW;
  *** ツリー描画用データ作成 ;
  retain X1 0 Y1 1 Y2 0 Y3 -1 Y4 -2 Y5 -4;

  *** ゆき描画用データ作成 ;
  call streaminit(777);
  do scene=1 to 10;
     do X2=-3.5 to 3.5 by 0.2;
        SNOW = rand('uniform')*8-4;
        output;
     end;
  end;
run;


*** 描画 ;
title ;
options  ANIMATION=START  ANIMDURATION=0.5   PRINTERPATH=GIF ;
ods noresults;
ods printer file="出力先のパスを指定\test.gif" ;

%macro ANIMATION;
  %do i=1 %to 10;
  proc sgplot data=SNOW noautolegend;
     where scene=&i;
     styleattrs wallcolor=black;
     symbolchar name=SNOW char='2744'x;
     scatter x=X1 y=Y1 /  markerattrs=(symbol=starfilled size=0.8cm color=yellow);
     scatter x=X1 y=Y2 /  markerattrs=(symbol=trianglefilled size=1cm color=green);
     scatter x=X1 y=Y3 /  markerattrs=(symbol=trianglefilled size=2cm color=green);
     scatter x=X1 y=Y4 /  markerattrs=(symbol=trianglefilled size=3cm color=green);
     scatter x=X1 y=Y5 /  markerattrs=(symbol=squarefilled size=0.6cm color=brown);
     scatter x=X2 y=SNOW / markerattrs=(symbol=SNOW size=1.5cm color=white);
     inset "Happy Holidays(*ESC*){unicode '2603'x}"/ position=bottom textattrs=(color=white size=50cm);
     xaxis min=-3 max=3  display=none;
     yaxis min=-5 max=1  display=none;
  run;
  %end;
%mend;
%ANIMATION;

ods printer close ;
ods results;

options  ANIMATION=STOP ;


0 件のコメント:

コメントを投稿