这实际上是我想在SAS EG中键入查询生成器的东西。我正在尝试过滤具有如下日期的数据集:
SEP2021
AUG2021
JUL2021
etc…
我试图使用查询生成器过滤它与WHERE语句。我希望表格中只显示上个月的结果。所以现在运行它应该会得到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显示我的值是Numeric,格式为DTDATE9.
完整线程:https://communities.sas.com/t5/SAS-Enterprise-Guide/How-can-PROC-SQL-return-only-results-from-the-previous-month/m-p/774523
解决方案如下:
"所以它是一个datetime值,而不是一个日期。您需要使用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
"