Issue
Here is the exam data table that I would like to process here:
-origin data
--a 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 |
I want to merge between 'a' and 'b' tables using code of SAS proc sql as follows.
-result data merge 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;
Let me know how to solve this problem.
Solution
There are several syntax errors in your query:
- A missing
,
aftert1.STU_CODE_1
- A missing
;
before thequit;
In order to get the expected result, use OUTER UNION CORR
. OUTER UNION
keep all rows and all columns from the two intermediate result sets and CORR
causes PROC SQL to match the columns in table-expressions by name. Also add an ORDER BY
to match the expected output.
data table_a;
infile datalines4 delimiter="|";
input stu_id stu_key stu_code_1 :$8.;
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 :$8.;
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;
Answered By - Kermit Answer Checked By - Candace Johnson (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.