关于 sas:proc SQL 语句的 where 子句中的日期范围

Date ranges in where clause of a proc SQL statement

有一个大表,其中包含以下字段:
ID、有效日期、到期日期。

expiration_date 是 datetime20。格式,可以为 NULL

我正在尝试提取在 2014 年 12 月 31 日之后过期或未过期 (NULL) 的行。

将以下 where 语句添加到 proc sql 查询中没有结果

1
2
where coalesce(datepart(expiration_date),input('31/Dec/2020',date11.))
> input('31/Dec/2014',date11.);

但是,当我只选择 NULL 到期日期并添加以下字段时:

1
2
3
4
put(coalesce(datepart(expiration_date),input('31/Dec/2020',date11.)),date11.) as value,
put(input('31/Dec/2014',date11.),date11.) as threshold,
case when coalesce(datepart(expiration_date),input('31/Dec/2020',date11.)) > input('31/Dec/2014',date11.)
    then 'pass' else 'fail' end as tag

在TAG下显示"通过",其他所有字段都正确。

这是为了复制我在 SQL Server 中使用的内容

1
where isnull(expiration_date,'9999-12-31') > '2014-12-31'

使用 SAS Enterprise Guide 7.1 并试图弄清楚我一直在使用

1
proc sql inobs=100;`

我做错了什么?谢谢。

一些到期日期:

1
2
3
4
30OCT2015:00:00:00
30OCT2015:00:00:00
29OCT2015:00:00:00
30OCT2015:00:00:00


我建议使用日期常量 ("31DEC2014"d) 而不是日期函数,或者使用显式传递或禁用隐式传递。日期函数在数据库之间传递时具有挑战性,因此最好尽可能避免使用它们。