SAS:如何在循环中增加datetime宏变量
从开始日期myDate开始,我需要在3天的时间间隔内重复执行一项任务,因此我尝试在循环中将myDate增加3倍,持续100次。我的语法有点问题SAS:如何在循环中增加datetime宏变量,sas,Sas,从开始日期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;
%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
谢谢您运行的是宏循环,而不是数据步循环。您需要使用宏语言和函数来增加循环中的变量,并确保返回的值在范围内是全局的。数据步长函数在开放代码中不可用,除非其结果保存到宏变量中。更正代码如下:
%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;
您的解释非常清楚,我感谢补充数据步骤解决方案。我用这个循环一些procsql查询,所以这两个查询都非常有用。