2012年5月28日月曜日

年代の書式定義

仕事用のメモです。4月始まりで年代を分けるための書式定義です。

options mprint source;

%macro date_fmt(from=, to=, fmt=, fmtnam=);
        %local i tcount;

        data _null_;
                format from to end yymmddn8.;

                from = &from;
                end = &to;
                tcount = 0;

                do while (from < end);
                        to = intnx('MONTH', from, +11, 'END');
                        tcount = tcount + 1;

                        /* マクロ変数を定義 */
                        value = put(from, &fmt);
                        macvar = compress("FROM" || put(tcount, BEST.));
                        call symput(macvar, compress(value));

                        value = put(to, &fmt);
                        macvar = compress("TO" || put(tcount, BEST.));
                        call symput(macvar, compress(value));

                        call symput("TCOUNT", compress(put(tcount, BEST.)));

                        /* 次の年を設定 */
                        from = intnx('MONTH', from, +12);
                end;
        run;

        /* 書式を設定 */
        proc format;
                value &fmtnam
                        %do i=1 %to &tcount;
                                "&&from&i" - "&&to&i" = "&&from&i - &&to&i"
                        %end;
                ;
        run;
%mend;

%date_fmt(from='1-Apr-1990'd, to=today(), fmt=YYMMN6., fmtnam=$DATE6_F);
%date_fmt(from='1-Apr-1990'd, to=today(), fmt=YYMMDDN8., fmtnam=$DATE8_F);

data _null_;
        x = put(today(), yymmddn.);
        y = put(x, $DATE8_F.);
        z = put(x, $DATE6_F.);
        put _all_;
run;

0 件のコメント :

コメントを投稿