テーブルを動的に取得し、それらを計算された日付に関連付けてさらに計算するコードに取り組んでいます。開始する唯一のパラメーターを変更しても値が変更されないため、これらの日付の計算に問題があります。
PS:他のクエリに使用できるように、データnullステップ内で実行することを選択しました。
%let dtDMRT= 1FEB2016;
/*calculated dates */
DATA _null_;
DAY_DMRT_DEB = intnx('year',"&dtDMRT"d,-1);
format DAY_DMRT_DEB DATE9.;
call symputx('DAY_DMRT_DEB',DAY_DMRT_DEB);
DAY_DMRT_FIN = '&dtDMRT'd;
format DAY_DMRT_FIN DATE9.;
call symputx('DAY_DMRT_FIN',DAY_DMRT_FIN);
DATE_DMRT_1Y = intnx('year',"&dtDMRT"d,1);
format DATE_DMRT_1Y DATE9.;
call symputx('DATE_DMRT_1Y',DATE_DMRT_1Y);
run;
PROC SQL THREADS ;
CREATE TABLE DATAMART_SEG AS
SELECT *,
&DAY_DMRT_DEB as DAY_DMRT_DEB format= DATE9.,
&DAY_DMRT_FIN as DAY_DMRT_FIN format= DATE9.,
&DATE_DMRT_1Y As DATE_DMRT_1Y format= DATE9.
FROM DMRT.MYDATAMART_&dtDMRT
RUN;
%let dtDMRT = 1JAN2016を使用した最初のテスト; WORK.DATAMART_SEGで正しい結果が得られます:
DAY_DMRT_DEB = '01JAN2015'd
DAY_DMRT_FIN = '01JAN2016'd
DATE_DMRT_1Y = '01JAN2017'd
ただし、%let dtDMRT = 1FEB2016; 私は得る:
DAY_DMRT_DEB = '01JAN2015'd
DAY_DMRT_FIN = '01FEB2016'd
DATE_DMRT_1Y = '01JAN2017'd
PROC SQLまたはDATAステップのいずれかを使用してテーブルに直接これを実行できることはわかっていますが、他の目的のためにこれらのマクロ変数が必要です
intnxのドキュメントによると、配置のデフォルトはBEGINNINGに設定されています。だからあなたが観察していることは絶対に正しいです。alingmentをSAMEに設定すると、intnxが必要な処理を実行します。
DATA _null_;
DAY_DMRT_DEB = intnx('year',"&dtDMRT"d,-1,'SAME');
format DAY_DMRT_DEB DATE9.;
call symputx('DAY_DMRT_DEB',DAY_DMRT_DEB);
DAY_DMRT_FIN = "&dtDMRT"d;
format DAY_DMRT_FIN DATE9.;
call symputx('DAY_DMRT_FIN',DAY_DMRT_FIN);
DATE_DMRT_1Y = intnx('year',"&dtDMRT"d,1,'SAME');
format DATE_DMRT_1Y DATE9.;
call symputx('DATE_DMRT_1Y',DATE_DMRT_1Y);
run;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加