毎月第2火曜日は卵が100円の日だからマスタ更新に流し込むデータセット作るときに 気をつけてねみたいなこと言われたらの話

昔、SASを覚え始めた頃に何年何月の第何週の何曜日を起点としてナントカみたいに何月何週目の何曜日という条件で日付を使って処理する複雑なコードを書いていて気が狂いそうになったことがありました。
病院にデータ入力の督促だか、なんか回収の管理だかそんな系で。

バッチでまわすので、日付を動的に判断する必要がありました。

どんな処理だったかもうあんまり覚えてないですが今ならnwkdom関数を使っていたと思います。

nwkdom関数は、以下のコードと結果を見てもらえたらすぐわかるように何年何月の第何週の何曜日というものを全てパラメータで与えてやると該当の日付を返してくれるという関数です。

data A1;
 /* 
  第一引数:第何週か
  第二引数:曜日指定
 1=日曜
   2=月曜   
 3=火曜
 4=水曜
 5=木曜
 6=金曜
 7=土曜
第三引数 :何月か
第四引数 :何年か
*/

/*第1週~5週の月曜日の日付*/
  do week= 1 to 5;
  x=nwkdom(week,2,2,2016);output;
  end;

/*第1週~5週の火曜日の日付*/
  do week= 1 to 5;
  x=nwkdom(week,3,2,2016);output;
  end;

  format x nldatew30.;
run;



















臨床試験分野でコード書いていると、ふつう投与日等からのDayXXで考えることが多いので便利さがピンとこないですが、他の分野だと、例えば第何週の何曜日はセールだから売り上げ予測がナントカとかいった処理があったりして結構役立つんですね。

注意点としては、ちょっと癖のある仕様で、例えば、先のコードにも入れましたが2016年2月の第5週の火曜日を指定した場合、2016年2月には第5週月曜日までしかないので、代わりに第4週の火曜日の日付が返ります。

つまり第一引数に5を指定した場合、5週目の指定曜日がなかった場合は4週の値、イコールその月の最後の指定曜日の日付が返るというわけです。

よく月の最後の何曜日にナントカの処理があるとかって場合は、5を指定しておけば必ず指定曜日の最終日付がとれるわけです。

4と5に同じ日付が戻ることにを意識の片隅においておかないと、冷凍食品4割引をさらに4割引したりして投売りみたいなことになりかねないので気をつけてくださいね

0 件のコメント:

コメントを投稿