我需要从开始日期(myDate)开始,每隔3天执行一次重复任务,因此,我试图将myDate在循环中增加3,以执行100次。我在语法上遇到了麻烦。
%MACRO DO_LIST (myDate);
%DO I = 1 %TO 100;
format newDate datetime22.;
newDate = INTNX('dtday', &myDate, 3);
call symput('myDate', newDate);
%END;
%mend DO_LIST;
%LET sampleDate = '01JAN2017:0:0:0'dt;
%DO_LIST (sampleDate);
%put &sampleDate;
这是错误。我试图四处移动,并以不同的方式在循环中进行存储和更新。
NOTE: Line generated by the invoked macro "DO_LIST".
25 newDate = INTNX('day', &myDate, 3) call symput('myDate', newDate);
_______
180
ERROR 180-322: Statement is not valid or it is used out of proper orde
谢谢
答案 0 :(得分:1)
您正在运行宏循环,而不是数据步骤循环。您将需要使用宏语言和函数,以便在循环中递增变量,并确保返回的值在作用域内是全局的。除非将其结果保存到宏变量中,否则数据步函数在开放代码中不可用。更正后的代码如下:
%MACRO DO_LIST (myDate);
%global newDate;
%DO I = 1 %TO 100;
%let newDate = %sysfunc(INTNX(dtday, &myDate, 3), mdyampm.);
%END;
%mend DO_LIST;
%LET sampleDate = '01JAN2017:00:00:00'dt;
%DO_LIST (&sampleDate);
%put &newDate;
等效操作可以在数据步骤循环中完成:
data _null_;
format newdate mdyampm.;
do i = 1 to 100;
newDate = intnx('dtday', '01JAN2017:00:00:00'dt, 3);
end;
put newDate;
call symputx('newdate', newdate, 'G');
run;