【发布时间】:2021-06-20 18:18:28
【问题描述】:
我正在尝试编写一个 SAS 宏,我需要在其中循环一个日期范围并在 PROC SQL 步骤的 where 条件中使用日期。同时,我必须在 PROC SQL 步骤中使用路径。
table1 中的 start_date 字段为日期时间格式,即 '15mar2021:00:00:00'。
我尝试将 where 子句中 &i 的日期格式转换为与 table1 中 start_date 字段的格式匹配。我尝试了以下查询,但收到此错误:错误:CLI 描述错误:[Oracle][ODBC][Ora]ORA-00923:FROM 关键字未在预期位置找到
%macro date_delq(start,end);
%let start=%sysfunc(inputn(&start,anydtdte9.));
%let end=%sysfunc(inputn(&end,anydtdte9.));
%do i= &start %to &end;
proc sql;
connect using admin as server;
create table delq_&i as
select * from connection to server(
select *
from table1
where start_date= CONVERT(datetime,&i,106)
);
run;
%end;
%mend date_delq;
%date_delq(01mar2021,02mar2021);
感谢您的帮助!
【问题讨论】:
-
CONVERT(datetime,&i,106)在我看来就像 SQL Server 语法。如果 startdate 应该是DATE列(DATE是 Oracle 对日期时间的不恰当名称),那么它应该足以满足select * from table1 where start_date = &i。如果尽管它的名字 start_date 有一个你想去掉的时间部分,你可以通过应用TRUNC:where trunc(start_date) = &i将它截断到日期。 -
如果您的变量 &i 是字符串而不是日期或日期时间,则将其转换为
TO_DATE。确保指定 &i 中使用的格式,例如to_date(&i, 'yyyy-mm-dd')如果 &i 是包含四位数年份、破折号、两位数月份、破折号和两位数日期的字符串。
标签: oracle sas oracle-sqldeveloper sas-macro