当我没有使用完整的表名时,我收到错误消息“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中遇到了相同的错误。
答案 0 :(得分:0)
在SAS的proc sql中,您可以在from
和join
语句中引用要加入的数据集,而不是select
语句中的数据集。当您引用名为Y16_CALC_STUD.Student_ID
的库并使用该库中名为Y16_CALC_STUD
的数据集时,SAS会解释Student_ID
,这不是我认为您在此处尝试做的事情。所以我刚刚用a
,b
和c
替换了所有这些内容,并将您的三个数据集称为a
,b
和{{1}在你的代码的from / join部分中。
c
答案 1 :(得分:0)
您的子查询缺少关闭右括号,而您定义的结果是使用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
答案 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;
以上查询应解决除数据类型问题之外的所有错误。