Я работаю над кодом, который динамически получает таблицы и связывает их с вычисленными датами для дальнейших вычислений.
У меня проблемы с вычислением этих дат, потому что их значения не изменятся, если я изменю единственный параметр, с которого начинаю.
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
Как бы то ни было с %, пусть dtDMRT = 1FEB2016; Я получаю:
DAY_DMRT_DEB = '01JAN2015'd
DAY_DMRT_FIN = '01FEB2016'd
DATE_DMRT_1Y = '01JAN2017'd
Я знаю, что могу сделать это непосредственно в таблицу с помощью шага PROC SQL или DATA, но мне нужны эти макропеременные для других целей