はじめての proc calendar - SAS
あまり使っている人を見たことがない proc calendar を使ってみます。
まずは簡単なカレンダーを作ってみる
options nocenter nodate nonumber ; /* 予定名と、開始日、終了日を作成します */ data SCHEDULE ; length NAME $256. ; NAME = "TEST-A" ; DTSTART = '01MAY2015'd ; DTEND = '01MAY2015'd ; output ; NAME = "TEST-B" ; DTSTART = '14MAY2015'd ; DTEND = '15MAY2015'd ; output ; NAME = "TEST-C" ; DTSTART = '19MAY2015'd ; DTEND = '20MAY2015'd ; output ; NAME = "TEST-D" ; DTSTART = '18MAY2015'd ; DTEND = '21MAY2015'd ; output ; NAME = "TEST-E" ; DTSTART = '23MAY2015'd ; DTEND = '31MAY2015'd ; output ; run ; /* 開始日順に並べておく必要があります */ proc sort data=SCHEDULE ; by DTSTART ; run ; proc calendar data=SCHEDULE ; start DTSTART ; /* 開始日 */ fin DTEND ; /* 終了日 */ var NAME ; /* 予定名 */ run ;
祝日一覧を追加する
予定だけでなく、祝日も追加してみましょう。
せっかくなので、祝日はテキトーな祝日ではなく、Google先生が提供している祝日一覧(.icsファイル)を使ってみます。filename url を使用して取得します。
取得先アドレス: http://www.google.com/calendar/ical/japanese@holiday.calendar.google.com/public/basic.ics
ファイルからは、scanover オプションで覚えた @'character-string' カラムポインタコントロールを用いて、日付と祝日名を取得します。scanover は、 @'character-string' カラムポインタコントロールを使用していれば、指定しなくてもいいぽいですね。
日付は「DTSTART;VALUE=DATE:」の後にYYYYMMDD形式で、祝日名は「SUMMARY:」の後に記載されています。
filename ICS url "http://www.google.com/calendar/ical/japanese@holiday.calendar.google.com/public/basic.ics"; data HOLIDAY ; infile ICS recfm=V lrecl=1048576 dlm="0c"x ; input @'DTSTART;VALUE=DATE:' DTSTART : yymmdd8. @'SUMMARY:' NAME : $256. ; /* SAS日付だと、proc calendar実行時に WARNING が出てきて怒られたので、*/ /* dhms関数を用いてSAS日時に変換します */ DHMS = dhms(DTSTART, 0, 0, 0) ; /* 祝日はそれぞれ期間が 1日なので、期間を1日に設定します。 */ DUR = 1 ; run ; proc sort data=HOLIDAY ; by DHMS ; run ; proc calendar data=SCHEDULE holidata=HOLIDAY ; start DTSTART ; fin DTEND ; var NAME ; holistart DHMS ; holidur DUR ; /* 期間は全て1日なので、祝日の終了日を設定する */ /* holifin DHMS ; でも同じ結果が得られます */ holivar NAME ; run ;
5月3日~6日にGWが追加されました。
カレンダーの横幅、縦幅を設定する
(探しても全然見つからなくて、一番苦労した機能です)
proc calendarには、横幅と縦幅を設定するオプションがありませんが、オプション ps, ls で幅を設定することができます。全体のサイズが変化するので、細かい調整が必要なのが難点です。
横幅、縦幅を MAX に設定してると、悲しいことになるのでお気をつけ下さい。
options ls=180 ps=50 ; proc calendar data=SCHEDULE holidata=HOLIDAY ; start DTSTART ; fin DTEND ; var NAME ; holistart DHMS ; holidur DUR ; holivar NAME ; run ;
カレンダーの罫線を設定する
罫線は、オプション formchar で設定できます。デフォルト値は、options formchar="|----|+|---+=|-/\<>*" ; です。それぞれの位置で、使用する罫線が異なります。今回は、スケジュールの期間を示す = の部分を # に変えてみます。
全角文字の罫線を使用したいところですが、全角文字は残念ながら使用できません。
options formchar="|----|+|---+#|-/\<>*" ; proc calendar data=SCHEDULE holidata=HOLIDAY ; start DTSTART ; fin DTEND ; var NAME ; holistart DHMS ; holidur DUR ; holivar NAME ; run ;
コメント
コメントを投稿