2016年9月9日金曜日

SASでFizzBuzz問題



以前データステップ100万回のSASYAMAさんがSASでFizzBuzz問題を解く記事を書かれていました。
http://sas-tumesas.blogspot.jp/2013/11/sasfizzbuzzsas.html


FizzBuzz問題
1~100までの数を出力。ただし3の倍数の時は「Fizz」、5の倍数の時は「Buzz」、両方の倍数の時は「FizzBuzz」と出力する事。


調べてみると他言語では面白い書き方が沢山提案されています。
SASYAMAさんの記事をみてから面白い方法ないかな、少ないステップで書けないかな、と考えてみましたが、考え付いたのは以下の方法くらいでした。


data _null_;
   do i=1 to 100;
      x = choosec( 1+^mod(i,3)+^mod(i,5)*2, cats(i), "Fizz","Buzz","FizzBuzz")  ;
      put x;
  end;
run;


↓マクロで書くとこんな感じ。

%macro mac;
   %do i=1 %to 100;
       %put %sysfunc(choosec( %eval(1+^(&i-&i/3*3)+^(&i-&i/5*5)*2), &i,Fizz,Buzz,FizzBuzz))  ;
   %end;
%mend;
%mac;

うーん、もうちょっと短くかけそうですねー。

0 件のコメント:

コメントを投稿