Either I don't understand the problem or you are uncomfortable with SQL. Assuming the latter, and that name and ID match on each table (otherwise join on NAME as well):
PROC SQL; CREATE TABLE DATA_DIFS AS SELECT DATA_A.ID,
DATA_A.NAME, 'VAR_IN_A' AS VAR_FIELD, DATA_A.A as DATA_A_A, DATA_A.B as DATA_A_B, DATA_A.C as DATA_A_C, DATA_B.A as DATA_B_A, DATA_B.B as DATA_B_B, DATA_B.C as DATA_B_C FROM DATA_A AS DATA_A, DATA_B AS DATA_B WHERE DATA_A.ID = DATA_B.ID AND DATA_A.A NE DATA_B.A UNION ALL SELECT DATA_A.ID,
DATA_A.NAME, 'VAR_IN_B' AS VAR_FIELD, DATA_A.A as DATA_A_A, DATA_A.B as DATA_A_B, DATA_A.C as DATA_A_C, DATA_B.A as DATA_B_A, DATA_B.B as DATA_B_B, DATA_B.C as DATA_B_C FROM DATA_A AS DATA_A, DATA_B AS DATA_B WHERE DATA_A.ID = DATA_B.ID AND DATA_A.B NE DATA_B.B UNION ALL SELECT DATA_A.ID,
DATA_A.NAME, 'VAR_IN_C' AS VAR_FIELD, DATA_A.A as DATA_A_A, DATA_A.B as DATA_A_B, DATA_A.C as DATA_A_C, DATA_B.A as DATA_B_A, DATA_B.B as DATA_B_B, DATA_B.C as DATA_B_C FROM DATA_A AS DATA_A, DATA_B AS DATA_B WHERE DATA_A.ID = DATA_B.ID AND DATA_A.C NE DATA_B.C; QUIT;
... View more