错误:未解析的表/相关名称引用(SAS,PROC SQL)

时间:2016-09-26 16:13:33

标签: sql sas proc-sql enterprise-guide

当我没有使用完整的表名时,我收到错误消息“ERROR:未解析的每个列名称的表/相关名称的引用。现在我使用完整的表名并得到相同的错误。不确定是什么其他尝试 - 我是SQL的新手,但仍然不了解事情是如何工作的。

以下是日志的副本:

171        PROC SQL;
172        CREATE table Spillover AS select
172      ! Y16_CALC_STUD.Student_ID,Y16_LINK_GM.score,Y16_CALC_STUD.StudSGP,Y16_CALC_STUD.g    rade_subject_ID,Y16_LINK_GM.employeeID,Y1
172      !     6_GROW_TEACHER.HEDI,Y16_GROW_TEACHER.HEDI_points,Y16_GROW_TEACHER.avg_prescore
173        from (select Y16_CALC_STUD.Student_ID, Y16_CALC_STUD.StudSGP, Y16_CALC_STUD.CalcID, Y16_LINK_GM.school_DBN,
173      ! Y16_LINK_GM.Score, Y16_LINK_GM.employeeID, Y16_LINK_GM.grade_subject_ID
174        from  Y16_CALC_Stud as a left join Y16_LINK_GM as link
175        on link.Student_ID = link.Student_ID)
176        as c left join Y16_GROW_Teacher as d on
177        Y16_CALC_Stud.StudCalcID = Y16_GROW_Teacher.calcID and Y16_LINK_GM.employeeID=Y16_GROW_Teacher.employeeID and
177      ! Y16_CALC_Stud.grade_subject_ID=Y16_GROW_Teacher.GRADE_SUBJECT;
ERROR: Unresolved reference to table/correlation name Y16_CALC_Stud.
ERROR: Unresolved reference to table/correlation name Y16_LINK_GM.
ERROR: Unresolved reference to table/correlation name Y16_CALC_Stud.
ERROR: Unresolved reference to table/correlation name Y16_CALC_STUD.
ERROR: Unresolved reference to table/correlation name Y16_LINK_GM.
ERROR: Unresolved reference to table/correlation name Y16_CALC_STUD.
ERROR: Unresolved reference to table/correlation name Y16_CALC_STUD.
ERROR: Unresolved reference to table/correlation name Y16_LINK_GM.
ERROR: Expression using equals (=) has components that are of different data types.
ERROR: Expression using equals (=) has components that are of different data types.
NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.

我在Base SAS和Enterprise Guide中遇到了相同的错误。

4 个答案:

答案 0 :(得分:0)

在SAS的proc sql中,您可以在fromjoin语句中引用要加入的数据集,而不是select语句中的数据集。当您引用名为Y16_CALC_STUD.Student_ID的库并使用该库中名为Y16_CALC_STUD的数据集时,SAS会解释Student_ID,这不是我认为您在此处尝试做的事情。所以我刚刚用abc替换了所有这些内容,并将您的三个数据集称为ab和{{1}在你的代码的from / join部分中。

c

答案 1 :(得分:0)

您的子查询缺少关闭右括号,而您定义的结果是使用abc等别名。但是在列列表中,您没有使用您定义的别名。

可能最容易修复定义它们的别名,而不是更新列列表中的每个引用。

(select Y16_CALC_STUD.Student_ID
      , Y16_CALC_STUD.StudSGP
      , Y16_CALC_STUD.CalcID
 from Y16_CALC_Stud
) as Y16_CALC_Stud

答案 2 :(得分:0)

通过删除所有别名并使用以下内容修复:

PROC SQL;
CREATE table Spillover AS select Y16_CALC_STUD.Student_ID,Y16_LINK_GM.score,Y16_CALC_STUD.StudSGP,Y16_CALC_STUD.g    rade_subject_ID,Y16_LINK_GM.employeeID,Y16_GROW_TEACHER.HEDI,Y16_GROW_TEACHER.HEDI_points,Y16_GROW_TEACHER.avg_prescore
from (select Y16_CALC_STUD.Student_ID, Y16_CALC_STUD.StudSGP, Y16_CALC_STUD.CalcID, Y16_LINK_GM.school_DBN, Y16_LINK_GM.Score, Y16_LINK_GM.employeeID, Y16_LINK_GM.grade_subject_ID
from  Y16_CALC_Stud left join Y16_LINK_GM
on Y16_LINK_GM.Student_ID = Y16_LINK_GM.Student_ID) 
left join Y16_GROW_Teacher on
Y16_CALC_Stud.CalcID = Y16_GROW_Teacher.calcID and Y16_LINK_GM.employeeID=Y16_GROW_Teacher.employeeID and Y16_LINK_GM.grade_subject_ID=Y16_GROW_Teacher.GRADE_SUBJECT;

答案 3 :(得分:0)

首先 - 您的代码创建了一个子查询,并且您使用别名引用了子查询 - " C"。我更新了查询,以便您的子查询C包含" Y16_CALC_Stud.StudCalcID"这是在主查询中引用的。

除此之外,您的主要查询是指具有主要数据集名称的变量,即。 Y16_CALC_STUD.CalcId,因为您提供了别名,所以必须将其称为c.CalcID。

最后,你的错误说"使用equals(=)的表达式具有不同数据类型的组件。"是因为您使用的连接条件是不同的数据类型。例如" c.grade_subject_ID = Y16_GROW_Teacher.GRADE_SUBJECT" c.grade_subject_id和Grade_subject可能具有不同的数据类型。一个可能是数字,另一个可能是字符。在加入之前,您必须输入强制转换。

    PROC SQL;
    CREATE table Spillover AS 
select c.Student_ID,
    c.score,
    c.StudSGP,
    c.grade_subject_ID,
    c.employeeID,
    d.HEDI,
    d.HEDI_points,
    d.avg_prescore

    from 
    (select 
        Y16_CALC_STUD.Student_ID, 
        Y16_CALC_STUD.StudSGP, 
        Y16_CALC_STUD.CalcID, 
        Y16_LINK_GM.school_DBN,
        Y16_LINK_GM.Score, 
        Y16_LINK_GM.employeeID, 
        Y16_LINK_GM.grade_subject_ID,
        Y16_CALC_Stud.StudCalcID
    from  Y16_CALC_Stud as a 
left join Y16_LINK_GM as link on a.Student_ID = link.Student_ID) as C
    left join Y16_GROW_Teacher as d on c.StudCalcID = Y16_GROW_Teacher.calcID 
and c.employeeID = Y16_GROW_Teacher.employeeID 
and c.grade_subject_ID = Y16_GROW_Teacher.GRADE_SUBJECT;

以上查询应解决除数据类型问题之外的所有错误。