【问题标题】:Create date series between 2 dates in sas在 sas 中创建两个日期之间的日期系列
【发布时间】:2019-04-24 18:23:27
【问题描述】:

所以我有如下代码:

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

【问题讨论】:

  • 您似乎将宏语法与普通数据步骤代码语法混合在一起。你想做什么?

标签: loops date unix sas


【解决方案1】:

使用整数作为循环计数器。然后用整数和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;

【讨论】:

  • 错误:%DO 语句在开放代码中无效 -> 我明白了
  • 如果你想使用宏逻辑,你需要创建一个宏来包含它,然后调用宏。您的原始代码还需要包含在宏定义中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
相关资源
最近更新 更多