所以我有如下代码:
%let mon_first=02Jan2018;
%let mon_last=02Mar2018;
%let start=%sysfunc(inputn(mon_first, Date9.), yymmn6.);
%let end=%sysfunc(inputn(mon_first, Date9.), yymmn6.);
%macro call(yrmon, yr, mon);
名为%call
的宏将通过考虑yymn6中mon_first和mon_last之间的月份来执行某些任务。格式。
因此,我使用了以下循环:
%do i = &start. to &end.;
yrmon=put(i)
yr=substr(yrmon, 1,4);
mon=substr(yrmon,5,2);
%call(yrmon, yr, mon);
%end;
我在yrmon=put(i)
收到一条错误消息,指出:Statement is not valid or it is used out of proper order.
有什么建议吗?
答案 0 :(得分:3)
使用整数作为循环计数器。然后使用带有intnx()
的整数来计算下个月。
%let mon_first=02Jan2018;
%let mon_last=02Mar2018;
%do i=0 %to %sysfunc(intck(month,"&mon_first"d,"&mon_last"d));
%let month=%sysfunc(intnx(month,"&mon_first"d,&i));
%let yrmon=%sysfunc(putn(&month,yymmn6));
%let yr=%sysfunc(year(&month),4);
%let mon=%sysfunc(month(&month),z2);
...
%end;