ハッシュオブジェクト感動物語(おまけ付き)

タイトル適当です。

たまたまSAS初心者の方が書かれている以下のブログ記事を読んで、感動しました。
ついに、ついに、mergeステートメントを覚えるより先にハッシュオブジェクトを覚えて、データ結合をハッシュオブジェクトでやる方が現れだしましたよ。

「SAS初心者のメモ」
hashの世界へようこそ①
http://sasbiginner.seesaa.net/article/442279733.html

ぜひこれからも頑張ってください(組織でハブられないようにほどほど気をつけて…)。

やっぱり新しい人がピュアな判断で良いと感じれる技術は、
ある程度確かな「正しさ」を持っていて、必ず定着化すると思うんですよね。

長くやってると自分のプログラミングスタイルで価値観が曇りがちじゃないですか。

ハッシュオブジェクトが一部のマニアなおっさん(自分を筆頭)にしか使われない裏技程度の位置づけになったら嫌だなぁ、スタンダードになるべき技術なのに…
と感じていたので、本当に感動しました。

別に「ハッシュは俺が育てた!」と言うつもりはないですが、もう何年もハッシュ使え~ハッシュ使え~と、わめいていた身としては感無量です。

ハッシュオブジェクトのメリットと仕事への具体的な導入法がわからないという方は一例として
以下の記事を読んでみてください。

「大半のソートは百害あって一利無しという話」
http://sas-tumesas.blogspot.jp/2016/04/blog-post.html

さて、ここからはおまけ
最近Luaに首ったけでしたが
たまにはハッシュオブジェクトの新しい話でもしましょうか。

9.4から追加されたdo_overメソッドは超イケてますよ。
なにせ、findメソッドとfind_nextメソッドを組み合わせて書いていたmultidataの処理が
一撃ですからね。find_nextメソッドの存在価値なくなった気がしますね

例えば以下の2つのデータセットがあって、

data A;
do x=1 to 5;
output;
end;
run;












data B;
x=1;y='A';val=1;output;
x=2;y='B';val=2;output;
x=2;y='C';val=3;output;
x=2;y='D';val=4;output;
x=2;y='E';val=5;output;
x=4;y='F';val=6;output;
x=4;y='G';val=7;output;
x=4;y='';val=.;output;
x=6;y='H';val=8;output;
x=6;y='I';val=9;output;
run;


















Bのデータセットをxの値でグループ化して、文字変数は「,」で連結、数値変数は
合計と平均をだしてAにくっつけるという処理を1ステップでかけと言われても

data C;
length x 8. z $100.;
if 0 then set B;
set A;
if _N_=1 then do;
declare hash h1(dataset:"B",multidata:"Y");
h1.definekey("x");
h1.definedata("y","val");
h1.definedone();
end;
call missing(count,total);
do while(h1.do_over() eq 0);
 z=catx(',',z,y);
 count+val ne .;
 total +val;
end;
mean = divide(total,count);
keep x z total mean;
run;



で終わりです。

いままでなら、

data D;
length x 8. z $100.;
if 0 then set B;
set A;
if _N_=1 then do;
declare hash h1(dataset:"B",multidata:"Y");
h1.definekey("x");
h1.definedata("y","val");
h1.definedone();
end;
call missing(count,total);
rc=h1.find()
do while( rc eq 0);
 z=catx(',',z,y);
 count+val ne .;
 total +val;
 rc=h1.find_next();
end;
mean = divide(total,count);
keep x z total mean;
run;


と書かなきゃならんような処理です。

それにしてもハッシュオブジェクトのコードはやっぱり良いですね。本当はDS2のハッシュの方が美しいですが、データステップのハッシュも、それでもやっぱり美しい。

この気持ちをできるだけ多く共有したいですね。
やっぱりコード書いて、読んで、美しい楽しいと感じれるのは
人生の充実に繋がると思うので、これからも普及させてたいですね(怪しい宗教みたいですね)



0 件のコメント:

コメントを投稿