Date 在SAS宏中提取日期信息

Date 在SAS宏中提取日期信息,date,macros,sas,Date,Macros,Sas,我想创建一个SAS宏,为今年、去年和上月的月号创建符号。到目前为止,我已经: %let LastMonth = %sysfunc(intnx(month,%sysfunc(date()),-1),DATE9.); %let ThisMonth = %sysfunc(intnx(month,%sysfunc(date()),0),DATE9.); %let ThisYear = %sysfunc(intnx(year,%sysfunc(date()),0),DATE9.); %let Las

我想创建一个SAS宏,为今年、去年和上月的月号创建符号。到目前为止,我已经:

%let LastMonth = %sysfunc(intnx(month,%sysfunc(date()),-1),DATE9.); 
%let ThisMonth = %sysfunc(intnx(month,%sysfunc(date()),0),DATE9.); 
%let ThisYear = %sysfunc(intnx(year,%sysfunc(date()),0),DATE9.); 
%let LastYear = %sysfunc(intnx(year,%sysfunc(date()),-1),DATE9.); 
这些建议包括: %put&LastYear;->2013年1月1日 %今年推出(&T);->2014年1月1日 %put&lastmount;->2014年1月1日 %放置本月(&T);->2014年2月1日

我在提取年份和月份数字时遇到问题,因此&lastmount我希望得到1(1月份)和&lastmount 2013等

在我尝试使用month()函数的几个月中:

%let LastMonth = %sysfunc(month(%sysfunc(intnx(month,%sysfunc(date()),-1),DATE9.))); 
但这是一个错误,我不明白为什么会出现这样的情况:

ERROR: Argument 1 to function MONTH referenced by the %SYSFUNC or %QSYSFUNC macro function is not a number.
ERROR: Invalid arguments detected in %SYSCALL, %SYSFUNC, or %QSYSFUNC argument list.  Execution of %SYSCALL statement or %SYSFUNC or
   %QSYSFUNC function reference is terminated.

感谢您的帮助

为了代码的可读性和可维护性,我建议在单独的数据步骤中创建日期,一旦您对生成的日期感到满意,就可以轻松创建宏变量。 例如:在下面的数据集中,我们设置了几个日期变量,以引用
referenceDate
,它被设置为
today()

上述数据集中的所有日期都在一行上。转换上述数据集,我们将得到如下数据集:

/*transpose so that the dates you want to macrotise are on a seprate line*/
proc transpose data = dates out = date_t (rename = (_name_ =dateType col1=dateValue));
var _character_;
copy referenceDate;
run;

referenceDate   dateType    dateValue
17Feb2014      lastMonth    01JAN2014
               thisMonth    01FEB2014
               thisYear     01JAN2014
               lastYear     2013
现在,终于设置了宏的

/*set-up macros*/
data _null_;
set date_t;
call symputx(dateType, dateValue);
run;

%put _user_;
在日志中:

GLOBAL LASTYEAR 2013
GLOBAL THISYEAR 01JAN2014
GLOBAL LASTMONTH 01JAN2014
GLOBAL THISMONTH 01FEB2014

user102890是正确的-您实际上是在尝试执行月份(2014年1月1日)而不是月份(2014年1月1日)

尝试完全删除该格式:

%put %sysfunc(month(%sysfunc(intnx(month,%sysfunc(date()),-1))));

Doubel检查您在去年和上月的宏分配期间应用的
date9.
格式。谢谢-我现在明白为什么我的函数不能正常工作了。
%put %sysfunc(month(%sysfunc(intnx(month,%sysfunc(date()),-1))));