PROC SQL左联接

时间:2018-08-08 18:25:19

标签: sql sas

我想在SAS中联接两个表,并且正在使用PROC SQL

我有 newdb.access_db ,其中有几个公司代码 newdb.Company_Codes ,具有相应公司代码的名称

我希望以这样一种方式输出:结果表将显示newdb.access_db中的所有列以及对应于每行公司代码的公司名称的新列

以下是我的代码

PROC SQL;
CREATE TABLE newdb.access_db_with_company_name AS
SELECT newdb.access_db.*,newdb.Company_Codes.ENTITY FROM newdb.access_db
LEFT JOIN newdb.Company_Codes
ON newdb.access_db.ENTREPRISE_IDENTIFIER = newdb.Company_Codes.ENTREPRISE_IDENTIFIER;
RUN;

使用此代码,我收到语法错误

ERROR 22-322: Syntax error, expecting one of the following: a quoted string, !, !!, &, *, **,
              +, ',', -, /, <, <=, <>, =, >, >=, ?, AND, AS, BETWEEN, CONTAINS, EQ, EQT,
              FORMAT, FROM, GE, GET, GT, GTT, IN, INFORMAT, INTO, IS, LABEL, LE, LEN, LENGTH,
              LET, LIKE, LT, LTT, NE, NET, NOT, NOTIN, OR, TRANSCODE, ^, ^=, |, ||, ~, ~=.

错误指向

SELECT newdb.access_db.*,newdb.Company_Codes.ENTITY FROM newdb.access_db
                      -                         -
                      22                        22
                      200                       76

当我在sas中看到我的编辑器窗口时,表明代码正在运行。然后我按下break按钮以停止代码。

我没有弄清我写的东西是否正确,即使是错误的代码也将如何执行

2 个答案:

答案 0 :(得分:1)

您需要为表加上别名:

PROC SQL;
CREATE TABLE newdb.access_db_with_company_name AS
SELECT a.*b.ENTITY 
FROM newdb.access_db as a
LEFT JOIN newdb.Company_Codes as b
ON a.ENTREPRISE_IDENTIFIER = b.ENTREPRISE_IDENTIFIER;
RUN;

答案 1 :(得分:1)

每当查询中有多个表时,都应使用表别名和限定的列名。别名应为表的缩写,以便于查询。

所以,我建议:

PROC SQL;
CREATE TABLE newdb.access_db_with_company_name AS
    SELECT a.*, cc.ENTITY
    FROM newdb.access_db a LEFT JOIN
         newdb.Company_Codes cc
         ON a.ENTREPRISE_IDENTIFIER = cc.ENTREPRISE_IDENTIFIER;
    RUN;