开始日期和结束日期的 Sas 循环

靛蓝小孩

我在这里有一个代码,我从用户那里获取开始日期和结束日期,并为这两个日期执行一个宏。

%let mon_last=31MAR2019;
%let mon_first=01JAN2019;
%macro call();
data _null_;
array datelist {2} "&mon_first"d "&mon_last"d;
%do i=1 %to 2;
    %let yrmon1=%sysfunc(inputn(datelist{i},mmddyy10.), date9.));
    %let yrmon=%sysfunc(putn(&yrmon1,date9.),yymmn6.);
    %let yr=%sysfunc(year(&yrmon1),4);
    %let mon=%sysfunc(month(&yrmon1),z2);
    %datapull(&yrmon., &yr., &mon.);
%end;
%mend;
%call();

但无论我尝试哪种方式,我最终都会收到以下错误:

WARNING: Argument 1 to function INPUTN referenced by the %SYSFUNC or %QSYSFUNC macro function is out of range.
NOTE: Mathematical operations could not be performed during %SYSFUNC function execution. The result of the operations have been set 
      to a missing value.
ERROR: The function PUTN referenced by the %SYSFUNC or %QSYSFUNC macro function has too few arguments.
汤姆

宏处理器将所有内容视为字符串。您不能将字符串datelist{i}转换为日期值。

看起来您想要一个宏,该宏可以将字符串列表作为输入,这些字符串的格式可以转换为日期值并使用这些字符串来调用另一个宏。

%macro call(date_list);
%local i yrmon yr mon;
%do i=1 %to %sysfunc(countw(&date_list));
    %let yrmon=%sysfunc(inputn(%scan(&date_list,&i),date11.),yymmn6.);
    %let yr=%substr(&yrmon,1,4);
    %let mon=%substr(&yrmon,5);
    %datapull(&yrmon., &yr., &mon.);
%end;
%mend;
%call(31MAR2019 01JAN2019);

相反,如果您想每个月从头到尾进行处理,那么您需要一个具有不同输入的不同宏。在这种情况下,您只需要两个输入,每个输入只能有一个值。

这次让我们对其进行编码,以便提供有效日期值的负担落在宏的调用者身上,而不是接受需要转换为日期的字符串。

%macro call(start,end);
%local i yrmon yr mon;
%do i=0 %to %sysfunc(intck(month,&start,&end));
    %let yrmon=%sysfunc(intnx(month,&start,&i),yymmn6.);
    %let yr=%substr(&yrmon,1,4);
    %let mon=%substr(&yrmon,5);
    %datapull(&yrmon., &yr., &mon.);
%end;
%mend;
%call("01JAN2019"d,"31MAR2019"d);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

合并开始日期和结束日期循环日期

来自分类Dev

循环以根据开始日期和结束日期生成日期列表

来自分类Dev

SAS 给定开始和结束日期,我需要知道前 35 天后每 30 天的日期

来自分类Dev

在SAS的表格上知道开始日期和最晚日期

来自分类Dev

SAS执行循环和宏

来自分类Dev

如何按开始日期/结束日期对的时间顺序排列SAS数据集

来自分类Dev

基于条件结束的SAS宏循环

来自分类Dev

SAS:如果满足日期条件,则循环并输出记录

来自分类Dev

SAS:如果满足日期条件,则循环并输出记录

来自分类Dev

SAS宏按日期循环播放,如何指示正确的步骤?

来自分类Dev

SAS日期到类别和日期的转换

来自分类Dev

SAS日期和日期时间问题

来自分类Dev

我如何在php中每3个月从开始日期到结束日期运行循环

来自分类Dev

我如何在php中每3个月从开始日期到结束日期运行循环

来自分类Dev

如何开始和结束日期

来自分类Dev

日期范围中的开始和结束日期

来自分类Dev

Bootstrap中的开始日期和结束日期

来自分类Dev

月开始日期和结束日期

来自分类Dev

AngularJS中的开始日期和结束日期

来自分类Dev

日期范围中的开始和结束日期

来自分类Dev

选定日期的开始和结束日期

来自分类Dev

用开始日期和结束日期聚合

来自分类Dev

SAS根据出生年份和完整的结束日期计算年龄

来自分类Dev

SAS Do Whitlock循环

来自分类Dev

SAS宏嵌套循环

来自分类Dev

SAS-循环宏

来自分类Dev

在SAS宏内循环

来自分类Dev

SAS嵌套循环语法

来自分类Dev

SAS DO 循环与宏