sas日期格式的sql日期时间
SAS日期值是整数,是从1960年1月1日起的历元天数sas日期格式的sql日期时间,sql,sas,format,Sql,Sas,Format,SAS日期值是整数,是从1960年1月1日起的历元天数 TODAY()返回SAS数据值,即整数nnnnn 您正在将该值格式化为yymdd10.,它将生成一个带有构造yyyy-mm-dd的字符串。(字符串比数据值nnnnn)更容易理解,并将该字符串分配给当前的宏符号。解析符号后,字符串将作为源代码插入到步骤中 所以 及 您可以在今天使用远程系统函数,或者使用远程系统日期文字或字符串到日期转换函数的适当源代码构造查询。尝试将datetime变量与datetime值进行比较。首先,让我们重写表达式,使
TODAY()
返回SAS数据值,即整数nnnnn
您正在将该值格式化为yymdd10.
,它将生成一个带有构造yyyy-mm-dd
的字符串。(字符串比数据值nnnnn
)更容易理解,并将该字符串分配给当前的宏符号
。解析符号后,字符串将作为源代码插入到步骤中
所以
及
您可以在今天使用远程系统函数,或者使用远程系统日期文字或字符串到日期转换函数的适当源代码构造查询。尝试将datetime变量与datetime值进行比较。首先,让我们重写表达式,使其更易于编码。比较
abc.CONTRACT\u BEGINDATE-proc sql noprint;
选择总和(步骤总和)
分为:1200万美元
从…起
RTDM_ABT.ABT_合同abc
其中abc.client_id=“&T_client_id”
和abc.DML_标志1
和datepart(abc.CONTRACT_BEGINDATE)在今天()到今天()之间
;
退出
这对我来说很有效,双倍的,很好,我自己想出了它。)为什么GROUP BY
?从测试脚本中勾选出来,谢谢你的评论。但这并不能解决这个错误:当您的问题提到日期时间值(秒数)时,为什么要在中使用日期值(天数)?您的错误消息提到一个名为TODAY的宏变量,而该变量不在您发布的代码中。也许您需要显示更多日志,以便在上下文中看到错误消息。到目前为止,您所显示的只是SQL无法读取today()
,所以SAS会处理它(这是意料之中的)。你有错误吗?或者只是这些位,但它正在执行?是不是没有争吵?发生什么事?CONTRACT\u BEGINDATE
字段中的值是什么?感谢您的帮助,但我在不同的选项中仍然会遇到相同的错误。MLOGIC:%LET(变量名为TODAY\u LITERAL)MLOGIC:%PUT&=TODAY\u LITERAL:Macro variable TODAY\u LITERAL解析为“19-MAY-2021”D TODAY\u LITERAL=“19-MAY-2021”D SYMBOLGEN:宏变量T_CLIENT_ID解析为00000031-B081-4E97-9437-F20CF874F857:宏变量TODAY_LITERAL解析为“2021年5月19日”D SAS_SQL:由于错误,无法将查询转换为DBMS特定的SQL语句。182698 1621429010 no_name 0 SQL(524访问引擎:SQL语句未传递到DBMS,SAS将进行处理。什么是LIBNAME语句和远程数据库?此选项?-(RTDM_ABT>属性>选项>引擎:SQLSVR)
proc sql noprint;
%let today=%sysfunc(today(),yymmdd10.);
%put &today.;
select
COALESCE(sum(abc.step_sum),0)
into :SumLoans_12m
from
RTDM_ABT.ABT_CONTRACT abc
where abc.CLIENT_ID = "&T_CLIENT_ID"
and abc.CONTRACT_BEGINDATE - &today. <= 360
and abc.DML_FLAG NE 1;
quit;
ERROR:
SYMBOLGEN: Macro variable TODAY resolves to 2021-05-18
2021-05-18
SYMBOLGEN: Macro variable T_CLIENT_ID resolves to 00000031-B081-4E97-9437-F20CF874F857
MPRINT(MEQUIBEHSCOREUPRE): select COALESCE(sum(abc.step_sum),0) into :SumLoans_12m from RTDM_ABT.ABT_CONTRACT abc where abc.CLIENT_ID = "00000031-B081-4E97-9437-F20CF874F857" and
abc.CONTRACT_BEGINDATE - today() <= 360 and abc.DML_FLAG NE 1;
175369 1621341661 no_name 0 SQL (503
SQLSRV_39799: Prepared: on connection 0 175370 1621341661 no_name 0 SQL (503
SELECT * FROM rtdm_abt . ABT_CONTRACT 175371 1621341661 no_name 0 SQL (503
175372 1621341661 no_name 0 SQL (503
SAS_SQL: Unable to convert the query to a DBMS specific SQL statement due to an error. 175373 1621341661 no_name 0 SQL (503
ACCESS ENGINE: SQL statement was not passed to the DBMS, SAS will do the processing. 175374 1621341661 no_name 0 SQL (503
abc.CONTRACT_BEGINDATE - &today. <= 360
abc.CONTRACT_BEGINDATE - 2021-05-18 <= 360
%let today_literal = "%sysfunc(today(),date11.)"D;
%put &=today_literal;
abc.CONTRACT_BEGINDATE - &today_literal <= 360
connect using RDTM_ABT;
select * from connection to RDTM_ABT
(
... my query in remote database syntax ...
)
%let now_plus_360_days = %sysfunc(intnx(dtday,%sysfunc(datetime()),360)) ;
and abc.CONTRACT_BEGINDATE <= &now_plus_360_days
proc sql noprint;
select sum(step_sum)
into :SumLoans_12m
from
RTDM_ABT.ABT_CONTRACT abc
where abc.client_id = "&T_CLIENT_ID"
and abc.DML_FLAG <> 1
and datepart(abc.CONTRACT_BEGINDATE) between today() - 365 and today()
;
quit;