在SAS中的2个日期之间创建日期系列

时间:2019-04-24 18:23:27

标签: loops date unix sas

所以我有如下代码:

%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. 有什么建议吗?

1 个答案:

答案 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;