SAS EG 中用于获取数据集前一个月的 WHERE 语句?

WHERE statement in SAS EG for getting the prior month of a dataset?

这实际上是我想在 SAS EG 的查询生成器中输入的内容。我正在尝试过滤具有如下日期的数据集:

SEP2021
AUG2021
JUL2021
etc…

我正在尝试使用查询生成器通过 WHERE 语句对其进行过滤。我希望 table 只有上个月的结果。所以 运行 现在应该给出 SEP2021,运行 下个月应该给出 OCT2021,等等……

如何使用 WHERE 语句执行此操作?

使用intnx()。假设所有日期都从该月的第一天开始:

where date = intnx('month', today(), -1, 'B');

如果他们不这样做:

where intnx('month', date, 0, 'B') = intnx('month', today(), -1, 'B');

您可以使用 INTCK 函数计算两个日期之间的日历间隔。

示例:

data have;
  input datestring $; datalines;
SEP2021
AUG2021
JUL2021
run;

proc sql;
  create table want as
  select * from have
  where intck('month',input(datestring,monyy7.),today()) = 1
;

这是 SAS 社区中 KurtBremser 的回答,这对我有用!我没有意识到我将字符值转换成什么格式。 PROC CONTENTS 显示我的值是数字,格式为 DTDATE9。

这里是完整线程:https://communities.sas.com/t5/SAS-Enterprise-Guide/How-can-PROC-SQL-return-only-results-from-the-previous-month/m-p/774523

解决方案如下:

“ 所以它是一个日期时间值,而不是日期。您需要使用 DATEPART 从中提取日期:

data have;
input date_column datetime19.;
format date_column dtdate9.;
datalines;
01sep2021:01:02:03
01oct2021:04:05:06
;

proc contents data=have;
run;

proc sql;
select *
from have
where datepart(date_column) = intnx('month',today(),-1,'b');
quit;

部分结果:

#   Variable    Typ Länge   Ausg.Format
1   date_column Num 8   DTDATE9.

date_column
01SEP2021