【发布时间】:2020-11-20 21:00:07
【问题描述】:
我有一个想要自动运行的 SAS 程序。我必须使用时间戳提取该月的第一个日期和最后一个日期。
这就是硬编码的样子——确实有效!但我不想每个月都换。
%let st_dt= '2020-10-01-00.00.00';
%let ed_dt= '2020-10-31-23.59.59';
PROC SQL;
SELECT t1.ENTRYTIME
FROM MYTABLE t1
WHERE t1.ENTRYTIME BETWEEN &st_dt. AND &ed_dt.
我尝试了很多不同的东西,但似乎无法让它发挥作用。奖金,我正在从拥有超过 170 亿条记录的事务表中提取 - 是的,有 10 亿条记录。我已经尝试在 ENTRYTIME 上使用 datepart 并作为日期进行强制转换 - 但是有这么多记录,它只会永远运行并最终被杀死 - 或者完全失败! :(
这是我迄今为止尝试过的 - PROC SQL 都不起作用。
%let start=%sysfunc(intnx(month, %sysfunc(today()),-1), date9.);
%let end=%sysfunc(intnx(month, %sysfunc(today()),-1,e), date9.);
PROC SQL;
SELECT t1.ENTRYTIME
FROM MYTABLE t1
WHERE cast(t1.ENTRYTIME as date) BETWEEN &start. AND &end.
PROC SQL;
SELECT t1.ENTRYTIME
FROM MYTABLE t1
WHERE cast(t1.ENTRYTIME as date) BETWEEN &start. AND &end.
因此,如果您能给我一个宏或 let 语句或任何类似以下格式的内容,以便在无需人工干预的情况下自动更新:“2020-10-01-00.00.00”和“2020-10-31-23.59”。 59' - 带上它!谢谢你的帮助!!
【问题讨论】:
-
您的变量是否有日期时间值或字符串?您的第一组代码试图将变量值与字符串常量进行比较。您的第二组代码试图将变量值与名称为
01OCT2020的变量进行比较,但这是一个无效的变量名称,因为您无法命名以数字开头的变量。
标签: sql datetime sas sas-macro