如何在SAS的SQL穿透查询代码中添加where语句
报错原因
合并代码时出现报错主要有两个核心问题:
- 透传给ODBC数据源执行的SQL需要符合对应数据库的语法规范,不能直接套用SAS数据步的双引号包裹日期的写法
- SAS中单引号会阻止宏变量解析,如果直接把带宏变量的日期放到单引号中,会导致宏变量无法正常替换,最终传递给数据库的SQL存在语法错误
合并后可运行代码
%let yyyy_mm_dd = 2021-09-30; proc sql; connect to odbc(noprompt="driver=&driver;database=&database ;Server=&server;Trusted_Authentication=yes" user=&user password="&pass!"); create table snapshot.snapshot_&year_quarter as select * from connection to odbc (select * from RRS.FactActiveLoanRiskRatingSnapShotData where CoreAsofDate = %str(')&yyyy_mm_dd%str(') ); disconnect from odbc; quit;
额外说明
- 如果使用SQL Server等支持标准日期字面量的数据库,也可以直接写
where CoreAsofDate = date '&yyyy_mm_dd' - 如果使用Oracle等需要显式日期转换的数据库,把WHERE条件调整为
where CoreAsofDate = to_date('&yyyy_mm_dd','yyyy-mm-dd')即可 - 合并后直接在数据源侧完成过滤,不需要后续额外执行数据步过滤,数据传输量更小,运行效率比原代码更高
内容的提问来源于stack exchange,提问作者mathemagician
相关产品推荐
相关产品推荐

