无法将参数转换为日期格式
Unable to convert argument to date format
所以我这里有一个宏,它使用 yymmn6 格式的 sas 月来计算接下来的 2 个月。
%macro pull(yymm);
%let month1=%sysfunc(inputn(&yymm.,yymmn6.));
%let month2=%sysfunc(inputn(intnx('month',&month1.,1),yymmn6.));
%let month3=%sysfunc(inputn(intnx('month',&month1.,2),yymmn6.));
%put &month1 &month2 &month3;
%mend;
%pull(201807);
我无法理解代码中的错误,因为我收到以下警告:
Argument 1 to function INPUTN referenced by the %SYSFUNC or %QSYSFUNC macro function is out of range.
当我查看日志时,&month1 显示为 21366,理想情况下应该是 201807。有人可以帮我吗?
每个函数都需要自己的 %SYFUNC() 包装器,因此您的代码会将文字字符串 INTNX(
传递给 INPUTN() 函数。此外,您不需要在宏代码中为字符串值添加引号。所以删除 MONTH
.
周围的引号
因此,首先将 YYYYMM 字符串转换为日期。然后将该日期值传递给 INTNX() 函数。您可以使用 %SYSFUNC()
函数的可选第二个参数来指定将函数结果转换为字符串时使用的格式。
%macro pull(yymm);
%local date;
%let date=%sysfunc(inputn(&yymm,yymmn6));
%let month1=%sysfunc(intnx(month,&date,0),yymmn6.);
%let month2=%sysfunc(intnx(month,&date,1),yymmn6.);
%let month3=%sysfunc(intnx(month,&date,2),yymmn6.);
%put &month1 &month2 &month3;
%mend;
%pull(201807);
结果:
201807 201808 201809
所以我这里有一个宏,它使用 yymmn6 格式的 sas 月来计算接下来的 2 个月。
%macro pull(yymm);
%let month1=%sysfunc(inputn(&yymm.,yymmn6.));
%let month2=%sysfunc(inputn(intnx('month',&month1.,1),yymmn6.));
%let month3=%sysfunc(inputn(intnx('month',&month1.,2),yymmn6.));
%put &month1 &month2 &month3;
%mend;
%pull(201807);
我无法理解代码中的错误,因为我收到以下警告:
Argument 1 to function INPUTN referenced by the %SYSFUNC or %QSYSFUNC macro function is out of range.
当我查看日志时,&month1 显示为 21366,理想情况下应该是 201807。有人可以帮我吗?
每个函数都需要自己的 %SYFUNC() 包装器,因此您的代码会将文字字符串 INTNX(
传递给 INPUTN() 函数。此外,您不需要在宏代码中为字符串值添加引号。所以删除 MONTH
.
因此,首先将 YYYYMM 字符串转换为日期。然后将该日期值传递给 INTNX() 函数。您可以使用 %SYSFUNC()
函数的可选第二个参数来指定将函数结果转换为字符串时使用的格式。
%macro pull(yymm);
%local date;
%let date=%sysfunc(inputn(&yymm,yymmn6));
%let month1=%sysfunc(intnx(month,&date,0),yymmn6.);
%let month2=%sysfunc(intnx(month,&date,1),yymmn6.);
%let month3=%sysfunc(intnx(month,&date,2),yymmn6.);
%put &month1 &month2 &month3;
%mend;
%pull(201807);
结果:
201807 201808 201809