在 SAS 中创建正好过去一个月的日期
Creating a date exactly one month in the past in SAS
我正在尝试在 SAS 9.3 中创建两个日期时间变量。第一个 "endDate" 是程序 运行 时的当前日期时间。第二个 "startDate" 恰好是过去一个月。
我的代码是:
%let endDate = %sysfunc(DATETIME() datetime.);
%let startDate = %sysfunc(intnx('month', DATETIME(), -1) datetime.);
根据我能找到的任何文档,我无法弄清楚它有什么问题,但我收到以下错误消息:
"ERROR: Expected close parenthesis after macro function invocation not found."
我做错了什么?
一些额外的背景:我想在 proc sql 语句中使用这两个宏变量,这样我就可以在 运行 处过滤 table 到过去一个月内的数据-时间。
谢谢!
四件事:
- 通过
%sysfunc
调用函数时,字符串参数不需要单引号
- 您需要为要在宏环境中调用的每个单独的数据步骤函数使用
%sysfunc
,这意味着您需要在这种情况下嵌套它们,因为您在另一个函数中调用一个函数。这可能会变得混乱。
- 您需要按日期时间-月份增量而不是月份增量来增加日期时间,因此请使用
dtmonth
而不是 month
。
- 函数调用和
%sysfunc
中的格式之间需要一个逗号
综合起来:
%let endDate = %sysfunc(DATETIME(), datetime.);
%let startDate = %sysfunc(intnx(dtmonth, %sysfunc(DATETIME()), -1), datetime.);
您有几个问题:
- %sysfunc() 有两个参数,第二个是可选的,但需要用逗号分隔。
- 您在 intnx 函数中使用 DateTime() 函数也需要 %sysfunc()
- 您有日期时间变量,因此您需要使用 DTMONTH 作为时间间隔而不是月份。
您不需要在宏调用中将文字用引号括起来
%let endDate = %sysfunc(DATETIME(), datetime.);
%put &endDate;
%let startDate = %sysfunc(intnx(dtmonth, %sysfunc(datetime()), -1), datetime.);
%put &StartDate;
%let endDate = %sysfunc(DATETIME(), datetime21.);
%let startDate =%sysfunc(putn(%sysfunc(intnx(dtmonth, %sysfunc(DATETIME()), -1,same)),datetime21.));
%put &enddate &startdate;
我正在尝试在 SAS 9.3 中创建两个日期时间变量。第一个 "endDate" 是程序 运行 时的当前日期时间。第二个 "startDate" 恰好是过去一个月。
我的代码是:
%let endDate = %sysfunc(DATETIME() datetime.);
%let startDate = %sysfunc(intnx('month', DATETIME(), -1) datetime.);
根据我能找到的任何文档,我无法弄清楚它有什么问题,但我收到以下错误消息:
"ERROR: Expected close parenthesis after macro function invocation not found."
我做错了什么?
一些额外的背景:我想在 proc sql 语句中使用这两个宏变量,这样我就可以在 运行 处过滤 table 到过去一个月内的数据-时间。
谢谢!
四件事:
- 通过
%sysfunc
调用函数时,字符串参数不需要单引号
- 您需要为要在宏环境中调用的每个单独的数据步骤函数使用
%sysfunc
,这意味着您需要在这种情况下嵌套它们,因为您在另一个函数中调用一个函数。这可能会变得混乱。 - 您需要按日期时间-月份增量而不是月份增量来增加日期时间,因此请使用
dtmonth
而不是month
。 - 函数调用和
%sysfunc
中的格式之间需要一个逗号
综合起来:
%let endDate = %sysfunc(DATETIME(), datetime.);
%let startDate = %sysfunc(intnx(dtmonth, %sysfunc(DATETIME()), -1), datetime.);
您有几个问题:
- %sysfunc() 有两个参数,第二个是可选的,但需要用逗号分隔。
- 您在 intnx 函数中使用 DateTime() 函数也需要 %sysfunc()
- 您有日期时间变量,因此您需要使用 DTMONTH 作为时间间隔而不是月份。
您不需要在宏调用中将文字用引号括起来
%let endDate = %sysfunc(DATETIME(), datetime.); %put &endDate; %let startDate = %sysfunc(intnx(dtmonth, %sysfunc(datetime()), -1), datetime.); %put &StartDate;
%let endDate = %sysfunc(DATETIME(), datetime21.);
%let startDate =%sysfunc(putn(%sysfunc(intnx(dtmonth, %sysfunc(DATETIME()), -1,same)),datetime21.));
%put &enddate &startdate;