ERROR: Unresolved reference to table/correlation name (SAS, PROC SQL)
ERROR: Unresolved reference to table/correlation name (SAS, PROC SQL)
当我没有使用完整的 table 名称时,我收到错误消息“错误:未解析对每个列名称的 table/correlation 名称的引用。现在我正在使用完整的 table 名称并得到相同的错误。不知道还能尝试什么 - 我是 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 中遇到同样的错误。
在 SAS 的 proc sql 中,您在 from
和 join
语句中引用了要加入的数据集,而不是在 select
语句中。 SAS 将 Y16_CALC_STUD.Student_ID
解释为您引用名为 Y16_CALC_STUD
的库并使用该库中名为 Student_ID
的数据集,这不是我认为您在这里尝试做的。所以我只是将所有这些替换为 a
、b
和 c
,并将您的三个数据集称为 a
、b
和 c
在代码的 from/join 部分。
PROC SQL;
CREATE table Spillover AS select
a.Student_ID, b.score, a.StudSGP, a.grade_subject_ID, b.employeeID,
c.HEDI, c.HEDI_points, c.avg_prescore
from Y16_CALC_STUD as a
left join Y16_LINK_GM as b
on a.Student_ID = b.Student_ID
left join Y16_GROW_Teacher as c
on a.StudCalcID = c.calcID and a.employeeID = c.employeeID and a.grade_subject_ID = c.GRADE_SUBJECT;
quit;
您的子查询缺少右括号,您正在定义结果以使用 a
、b
、c
等别名。但是在您的列列表中,您没有使用您定义的别名。
可能最简单的方法是只在定义它们的地方修复别名,而不是更新列列表中的每个引用。
(select Y16_CALC_STUD.Student_ID
, Y16_CALC_STUD.StudSGP
, Y16_CALC_STUD.CalcID
from Y16_CALC_Stud
) as Y16_CALC_Stud
已通过删除所有别名并使用以下内容修复:
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;
首先 - 您的代码创建了一个子查询,您正在使用别名引用子查询 - "C"。我已经更新了查询,以便您的子查询 C 包含主查询中引用的 "Y16_CALC_Stud.StudCalcID" 。
除此之外,您的主要查询指的是具有主要数据集名称的变量,即Y16_CALC_STUD.CalcId 由于您提供了别名,因此必须将其称为 c.CalcID。
最后,您的错误 "Expression using equals (=) has components that are of different data types." 是因为您使用的连接条件是不同的数据类型。例如 "c.grade_subject_ID = Y16_GROW_Teacher.GRADE_SUBJECT" c.grade_subject_id 和 Grade_subject 可能有不同的数据类型。一个可能是数字,另一个可能是字符。您必须在加入前输入 cast。
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;
上面的查询应该可以解决除数据类型问题之外的所有错误。
当我没有使用完整的 table 名称时,我收到错误消息“错误:未解析对每个列名称的 table/correlation 名称的引用。现在我正在使用完整的 table 名称并得到相同的错误。不知道还能尝试什么 - 我是 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 中遇到同样的错误。
在 SAS 的 proc sql 中,您在 from
和 join
语句中引用了要加入的数据集,而不是在 select
语句中。 SAS 将 Y16_CALC_STUD.Student_ID
解释为您引用名为 Y16_CALC_STUD
的库并使用该库中名为 Student_ID
的数据集,这不是我认为您在这里尝试做的。所以我只是将所有这些替换为 a
、b
和 c
,并将您的三个数据集称为 a
、b
和 c
在代码的 from/join 部分。
PROC SQL;
CREATE table Spillover AS select
a.Student_ID, b.score, a.StudSGP, a.grade_subject_ID, b.employeeID,
c.HEDI, c.HEDI_points, c.avg_prescore
from Y16_CALC_STUD as a
left join Y16_LINK_GM as b
on a.Student_ID = b.Student_ID
left join Y16_GROW_Teacher as c
on a.StudCalcID = c.calcID and a.employeeID = c.employeeID and a.grade_subject_ID = c.GRADE_SUBJECT;
quit;
您的子查询缺少右括号,您正在定义结果以使用 a
、b
、c
等别名。但是在您的列列表中,您没有使用您定义的别名。
可能最简单的方法是只在定义它们的地方修复别名,而不是更新列列表中的每个引用。
(select Y16_CALC_STUD.Student_ID
, Y16_CALC_STUD.StudSGP
, Y16_CALC_STUD.CalcID
from Y16_CALC_Stud
) as Y16_CALC_Stud
已通过删除所有别名并使用以下内容修复:
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;
首先 - 您的代码创建了一个子查询,您正在使用别名引用子查询 - "C"。我已经更新了查询,以便您的子查询 C 包含主查询中引用的 "Y16_CALC_Stud.StudCalcID" 。
除此之外,您的主要查询指的是具有主要数据集名称的变量,即Y16_CALC_STUD.CalcId 由于您提供了别名,因此必须将其称为 c.CalcID。
最后,您的错误 "Expression using equals (=) has components that are of different data types." 是因为您使用的连接条件是不同的数据类型。例如 "c.grade_subject_ID = Y16_GROW_Teacher.GRADE_SUBJECT" c.grade_subject_id 和 Grade_subject 可能有不同的数据类型。一个可能是数字,另一个可能是字符。您必须在加入前输入 cast。
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;
上面的查询应该可以解决除数据类型问题之外的所有错误。