新年の挨拶とか近況とかproc DSTODS2とか

あけましておめでとうございます。本年もよろしくお願いいたします

全然更新できてないですね、まさか去年1年間で5記事しかだせてないとは…。
今年でこのブログも7年目ですかね。今年は少なくとも10記事はだせるように頑張ります。

社会人も10年くらいにして、やっと観念して毎日せっせこ真面目に働いてしまうようになってしまったということ、2歳児って元気で、SASコード書いてるとキーボード触ってきて打てないよっていうこと、面白いSASブログ書かれる人が増えていい時代になったので、そういうの見てて割と満足しちゃうよねっていうのが主な言い訳です(仕事に必要な技術はだいたい忘備録にあるしなぁ)。
しかし、他にも、ちょっとPythonに浮気してみたり、あと今大阪に住んでるのですが、関西も実は結構SASプログラマがいて、そんな人たちと集まってSASで戯れてたりすると、時間が経つのが早くて、それのせいかもしれませんね。

ちなみに話が変わりますがSAS Global Forumっていうイベントご存知でしょうか?

https://www.sas.com/en_us/events/sas-global-forum.html

SAS社の説明を使わせていただくと
======================================
全世界のSASユーザーが集う年次のイベント SAS Global Forum。
本イベントは、600を超えるセッションでワークショップ、プレゼンテーション、e-ポスター、デモおよび交流プログラムがありアナリティクス活用についての事例やテクノロジーが多数紹介されます。昨年は5400人もの登録者があり、世界中のデータサイエンティストと情報交換が可能です。
======================================
ということです。日本でいうユーザー総会みたいなもんですが、さすがSASの総本山、規模がケタ違いです。
2019年4月28日から5月1日まで、米国テキサス州ダラスで開催予定なのです。

で、なんでいきなりそんな話かというと、一応そこにPaperだして、20分間発表させていただけそうです。
アブストラクト審査は通ったようで、あとは論文本体を書いたり、頑張ればいけるはずです。
何人か既に知っている方が日本から参戦することは把握しているのですが、私もでるよって方がいれば、連絡いただけると嬉しいです。
まあ、そんな感じで、毎日頑張ってる感じです。色々レスポンスが遅くて、すみません…。

さてさて、てめぇの近況なんかどうでもいいよ、こっちはSASのこと知りたくて、わざわざこのブログ見に来てんだよ!って思われていると思うので。

小ネタ。

SAS 9.4M5から、DSTODS2プロシジャという、ちょっとネタみたいなやつが実装されてます。絶対、忘備録か晴れSASで紹介するだろうから、それ待とうっと思ってたんですが、なかなか書いてくれないのでさわりだけ。
→/*====訂正======*/
晴れ時々SASで既に紹介されてました!ごめんなさい!
http://dengonmemo.blogspot.com/2017/10/945.html

どういうプロシジャかというと、データステップを書いたプログラムを指定すると、それをDS2のコードに変換して出力するという面白プロシジャです。

まあ、やってみましょうか

適当に意味のないデータステップを1つ書いて

data test;
length  z $200.;
x=1;
y=1;
z="a";
array an{*} x y;
 do i=1 to dim(an);
an{i}=an{i}+1;
 end;
 drop x;
 a=10;
 rename z=z2;
run;

それをPG1.sasという名前で保存します。

そして
proc dstods2
 in="入力パス\PG1.sas"
 out="出力パス¥PG2.sas";
run;

だけです。

するとPG2.sasができており、その中身は

data TEST;
dcl char(200) Z;
 drop X ;
rename Z=Z2 ;
vararray double AN[*] X, Y;
 method run();
X = 1.0;
Y = 1.0;
Z = 'a';
do I = 1.0 to DIM(AN);
AN[I] = AN[I] + 1.0;
end;
A = 10.0;
;
_return: ;
end;
 enddata;

おおぉ!なんかDS2の書き方になってる。
すげーって、最初ぱっと見で、思うんですが、実は結構変換が雑というか、認識可能な文法が少なすぎです…。少なくとも新規変数の宣言とかは自分で足すしかないので(コードからだけだと新規かどうかわかんないので仕方ないですが)、ある程度DS2知っていないと厳しいです。
あと、きほん全部runメソッドにぶち込まれるので、if _N_=1とかって書いたらinitialメソッドになるかなぁとか期待しても裏切られます

サポートとサポート外の文法については
https://documentation.sas.com/?docsetId=proc&docsetTarget=p0zok9sr2a2t46n1r8zfuw5145t5.htm&docsetVersion=9.4&locale=en
をみてください。

あくまで個人の感想ですと前置きした上で、はっきり言わせていただきます。
使えねぇ…。
これで出てくるコードを手直しできるレベルの人なら、1から書いた方が絶対はやいだろ。

ちなみに例ででてきたPG2.sasですが、以下のように補完してやれば一応動きます。

proc ds2 libs=work;
data TEST(overwrite="yes");
dcl char(200) Z;
dcl double a;
 drop X ;
rename Z=Z2 ;
vararray double AN[*] X, Y;
 method run();
dcl double i;
X = 1.0;
Y = 1.0;
Z = 'a';
do I = 1.0 to DIM(AN);
AN[I] = AN[I] + 1.0;
end;
A = 10.0;
;
/* _return: ; */
end;
 enddata;
run;
quit;

今後の進化を期待なのかなぁ




0 件のコメント:

コメントを投稿