(コピペ利用するための、ほとんど個人的なメモ)
上のデータから、顧客ID毎に購入日の最小値を取得したいとします。
まずHashの触りは以下記事を読むと理解しやすいです。
http://sas-boubi.blogspot.jp/2015/02/hash.html
(SAS忘備録:Hashオブジェクトを使おう)
かいつまんで解説
dcl hash purhash( dataset:"DT2", multidata:"y" );
purhash.definekey("NO");
purhash.definedata("PURDATE");
purhash.definedone();
|
まずはHashオブジェクトの定義から。
データセットDT2をHashオブジェクトに格納し、「multidata:'y'」で、Key値の重複を許しています。変数NOをKey値、変数PURDATEをKey値に関連づける変数として定義しています。
rc = purhash.find();
if rc = 0 then MINDATE = PURDATE;
|
findメソッドでHashオブジェクト内をKey値で検索。
該当するKey値があったら、取得したPURDATEをMINDATEに格納。
do while (rc = 0);
rc = purhash.find_next();
if rc = 0 then MINDATE = min( MINDATE, PURDATE );
end;
|
find_nextメソッドで、Hashオブジェクト内の次のレコードを検索。
該当するKey値があったら、取得したPURDATEをMINDATEと比較し、最小日付をMINDATEに格納。これをHashオブジェクト内に該当するレコードがなくなるまで、do whileでループしています。
一応今回やってることは、SQLやMEANSとかの方が楽に求められるけど、DATAステップ内で完結できるのが最大のメリットだと思います。
0 件のコメント:
コメントを投稿