【问题标题】:How to get Number of days between two dates in SAS如何获取SAS中两个日期之间的天数
【发布时间】:2017-12-12 11:14:33
【问题描述】:

我有一个名为 case_DataTable_d 的表,其中列名 value_dt 具有不同的日期值。我想获取该日期与今天日期之间的天数。

这是我的代码

proc sql noprint;
 create table daystoOverdue_list as
 select distinct business_object_rk , DateDiff(DAY, value_dt, Today()) as value_dt
 from case_DataTable_d as tbl
 where tbl.cust_field_nm eq "x_case_dte_dd"
 and datepart(tbl.value_dt) < today();
quit;

我遇到了一些错误

Day 不是任何列名

找不到函数 DateDiff。

【问题讨论】:

  • intck('dtday', value_dt, Today()) 呢?
  • dtday 为相差 2 天的日期提供 21162 的值
  • 'dtday' 用于日期时间。 value_dt是如何存储的?
  • Date calculations in SAS的可能重复

标签: sql sql-server sas


【解决方案1】:

DateDiff 不是有效的 SAS 函数。试试intck

%let today=%sysfunc(date());
proc sql noprint;
 create table daystoOverdue_list as
 select distinct business_object_rk 
    , intck('DAY', datepart(tbl.value_dt), &today) as value_dt
 from case_DataTable_d as tbl
 where tbl.cust_field_nm eq "x_case_dte_dd"
 and datepart(tbl.value_dt) < &today;

此函数返回位于两个日期、时间或日期时间值之间的给定类型的间隔边界数(请参阅documentation)。

【讨论】:

  • 我不知道为什么,但这只是给了我一个时期。表示缺失值
  • 还有很多记录的截止日期比今天还短
  • 我的错 - today() 也不是 SAS 函数。应该是date()
  • 另外,在 where 子句上运行该函数效率低下 - 将为每条记录触发。最好制作一个常量并通过宏变量使用它。
  • 尝试更改此 intck('DAY', DATEPART(value_dt), &amp;today) 。您混合日期和日期时间变量可能是您遇到这些问题的原因。确保一切都是日期或日期时间,并使用适当的时间间隔,即如果日期是 DAY,如果是日期时间则使用 DTDAY。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多