DATA WORK.HAVE_1;
FORMAT ID 1. Var1 $1. Var2 $1. Var3 $1. Var4 $1. Var5 $1. Var6 $1. Var7 $1. OtherVar $3.;
INFORMAT ID 1. Var2 $1. Var2 $1. Var3 $1. Var4 $1. Var5 $1. Var6 $1. Var7 $1. OtherVar $3.;
INPUT ID VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7 OtherVar;
INFILE DATALINES DLM='|' DSD;
DATALINES;
1||||||||xyz
2|d||e||||f|xyz
.||||||||xyz
;
DATA WORK.HAVE_2;
FORMAT ID 1. Var1 $1. Var2 $1. Var3 $1. Var4 $1. Var5 $1. Var6 $1. Var7 $1.;
INFORMAT ID 1. Var2 $1. Var2 $1. Var3 $1. Var4 $1. Var5 $1. Var6 $1. Var7 $1.;
INPUT ID VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7;
INFILE DATALINES DLM='|' DSD;
DATALINES;
1|a|b|c| | | |d
3|a|b|c| | | |d
;
PROC SQL;
CREATE TABLE WORK.WANT AS
SELECT a.ID, b.VAR1, b.VAR2, b.VAR3, b.VAR4, b.VAR5, b.VAR6, b.VAR7, a.OtherVar
FROM WORK.Have_1 AS a
INNER JOIN WORK.Have_2 AS b ON a.ID=b.ID
UNION
SELECT a.ID, a.VAR1, a.VAR2, a.VAR3, a.VAR4, a.VAR5, a.VAR6, a.VAR7, a.OtherVar
FROM WORK.Have_1 AS a
LEFT JOIN WORK.Have_2 AS b ON a.ID=b.ID
WHERE b.ID IS NULL
UNION
SELECT a.ID, a.VAR1, a.VAR2, a.VAR3, a.VAR4, a.VAR5, a.VAR6, a.VAR7, b.OtherVar
FROM WORK.Have_2 AS a
LEFT JOIN WORK.Have_1 AS b ON a.ID=b.ID
WHERE b.ID IS NULL;
QUIT; resulting output aligns with the request in your post: ID Var1 Var2 Var3 Var4 Var5 Var6 Var7 OtherVar
. xyz
1 a b c d xyz
2 d e f xyz
3 a b c d
... View more