SAS:如何在循环中增加datetime宏变量

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;

从开始日期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

谢谢

您运行的是宏循环,而不是数据步循环。您需要使用宏语言和函数来增加循环中的变量,并确保返回的值在范围内是全局的。数据步长函数在开放代码中不可用,除非其结果保存到宏变量中。更正代码如下:

%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查询,所以这两个查询都非常有用。