我无法理解为什么在运行以下代码时出现以下错误:
在27处(FC_ATTORNEY_ID,REC_CHNG_DT)在 _ 79 错误79-322:期望(。
35)AND REC_CHNG_CD In('A','C') 36; _ 79 错误79-322:期待a。
proc sql;
create table test as
SELECT DISTINCT
FC_ATTORNEY_ID, FC_ATTORNEY_NM, REC_CHNG_DT
FROM RDX_BDE.T_FORECLOSURE T_FORECLOSURE
WHERE (FC_ATTORNEY_ID, REC_CHNG_DT) IN
(
SELECT
FC_ATTORNEY_ID
, MAX (REC_CHNG_DT) AS LST_DT
FROM RDX_BDE.T_FORECLOSURE T_FORECLOSURE
WHERE REC_CHNG_CD In ('A','C')
GROUP BY FC_ATTORNEY_ID
) AND REC_CHNG_CD In ('A','C')
;quit;
试图避免我描述的两个错误。我从另一个程序员那里收到了这段代码,但是他们使用的是TOAD,而不是SAS
答案 0 :(得分:0)
您的T_FORCLOSURE
和FROM
语句中有两次WHERE
。
一个带有表标识符,另一个不带表标识符。
删除冗余代码以解决您的问题
答案 1 :(得分:0)
问题是这种语法:
(FC_ATTORNEY_ID, REC_CHNG_DT) IN ....
您不能以这种方式使用IN运算符。您只能将其用于单个值,而不能用于某些类型的复合对象。
有效语法类似于您的其他用法:
REC_CHNG_CD IN ('A','C')
或
REC_CHNG_CD IN (select code_var from ....)
如果您确实需要测试值的元组是否存在,请重新编码查询以使用EXISTS。
但是看起来您只是在要求最大日期。
create table test as
SELECT FC_ATTORNEY_ID, FC_ATTORNEY_NM, max(REC_CHNG_DT) as REC_CHNG_DT
FROM RDX_BDE.T_FORECLOSURE T_FORECLOSURE
WHERE REC_CHNG_CD In ('A','C')
GROUP BY FC_ATTORNEY_ID, FC_ATTORNEY_NM
;
答案 2 :(得分:0)
您正在为每个律师选择记录了最新更改日期的行。
一种更简单的方法是在自动合并的组聚合上使用HAVING子句
proc sql;
create table test as
SELECT DISTINCT
FC_ATTORNEY_ID, FC_ATTORNEY_NM, REC_CHNG_DT
FROM
RDX_BDE.T_FORECLOSURE
WHERE
REC_CHNG_CD IN ('A','C')
GROUP BY
FC_ATTORNEY_ID
HAVING
REC_CHNG_DT = MAX (REC_CHNG_DT)
;