如何使用 SAS proc sql 合并两个表
How to merge two tables using SAS proc sql
这是我要在此处处理的考试数据 table:
-原始数据
--一个table
STU_ID
STU_KEY
STU_CODE_1
123
2002123
A121
124
2002124
A122
125
2002125
A123
126
2002126
A124
--b table
|STU_ID|STU_KEY|STU_CODE_2|
|------|--------|----------|
|123 |2002223|B121 |
|124 |2002224|B122 |
|125 |2002225|C123 |
|126 |2002226|C124 |
|127 |2002127|C125 |
我想使用 SAS proc sql 的代码在 'a' 和 'b' table 之间合并,如下所示。
-结果数据合并table
STU_ID
STU_KEY
STU_CODE_1
STU_CODE_2
123
2002123
A121
123
2002223
B121
124
2002124
A122
124
2002224
B122
125
2002125
A123
125
2002225
C123
126
2002126
A124
126
2002226
C124
127
2002127
C125
'''error code'''
PROC SQL;
CREATE TABLE a_b_merge as
SELECT t1.STU_ID,
t1.STU_KEY,
t1.STU_CODE_1
t2.STU_CODE_2
FROM a as t1 full join b as t2
ON t1.STU_ID=t2.STU_ID
QUIT;
让我知道如何解决这个问题。
您的查询中存在几个语法错误:
- 在
t1.STU_CODE_1
之后缺少 ,
- 在
quit;
之前少了一个;
为了得到预期的结果,使用OUTER UNION CORR
。 OUTER UNION
保留两个中间结果集中的所有行和所有列,并且 CORR
导致 PROC SQL 按名称匹配 table 表达式中的列。还要添加一个 ORDER BY
以匹配预期的输出。
data table_a;
infile datalines4 delimiter="|";
input stu_id stu_key stu_code_1 :.;
datalines4;
123|2002123|A121
124|2002124|A122
125|2002125|A123
126|2002126|A124
;;;;
data table_b;
infile datalines4 delimiter="|";
input stu_id stu_key stu_code_2 :.;
datalines4;
123|2002223|B121
124|2002224|B122
125|2002225|C123
126|2002226|C124
127|2002227|C125
;;;;
proc sql;
create table want as
select * from table_a
outer union corr
select * from table_b
order by stu_id, stu_key;
quit;
这是我要在此处处理的考试数据 table:
-原始数据
--一个table
STU_ID | STU_KEY | STU_CODE_1 |
---|---|---|
123 | 2002123 | A121 |
124 | 2002124 | A122 |
125 | 2002125 | A123 |
126 | 2002126 | A124 |
--b table |STU_ID|STU_KEY|STU_CODE_2| |------|--------|----------| |123 |2002223|B121 | |124 |2002224|B122 | |125 |2002225|C123 | |126 |2002226|C124 | |127 |2002127|C125 |
我想使用 SAS proc sql 的代码在 'a' 和 'b' table 之间合并,如下所示。
-结果数据合并table
STU_ID | STU_KEY | STU_CODE_1 | STU_CODE_2 |
---|---|---|---|
123 | 2002123 | A121 | |
123 | 2002223 | B121 | |
124 | 2002124 | A122 | |
124 | 2002224 | B122 | |
125 | 2002125 | A123 | |
125 | 2002225 | C123 | |
126 | 2002126 | A124 | |
126 | 2002226 | C124 | |
127 | 2002127 | C125 |
'''error code'''
PROC SQL;
CREATE TABLE a_b_merge as
SELECT t1.STU_ID,
t1.STU_KEY,
t1.STU_CODE_1
t2.STU_CODE_2
FROM a as t1 full join b as t2
ON t1.STU_ID=t2.STU_ID
QUIT;
让我知道如何解决这个问题。
您的查询中存在几个语法错误:
- 在
t1.STU_CODE_1
之后缺少 - 在
quit;
之前少了一个
,
;
为了得到预期的结果,使用OUTER UNION CORR
。 OUTER UNION
保留两个中间结果集中的所有行和所有列,并且 CORR
导致 PROC SQL 按名称匹配 table 表达式中的列。还要添加一个 ORDER BY
以匹配预期的输出。
data table_a;
infile datalines4 delimiter="|";
input stu_id stu_key stu_code_1 :.;
datalines4;
123|2002123|A121
124|2002124|A122
125|2002125|A123
126|2002126|A124
;;;;
data table_b;
infile datalines4 delimiter="|";
input stu_id stu_key stu_code_2 :.;
datalines4;
123|2002223|B121
124|2002224|B122
125|2002225|C123
126|2002226|C124
127|2002227|C125
;;;;
proc sql;
create table want as
select * from table_a
outer union corr
select * from table_b
order by stu_id, stu_key;
quit;