Problem mit Merge

Ich will zwei Dateien über eine Variable matchen, und zwar so, dass nur die Datensätze übernommen werden, die in der ersten Datei drin sind. Also, wenn die Datei1 so aussieht:
var1 var2
1 4
2 5
4 6
und die Datei2 so:
var1 var3
1 A
2 B
3 C,
und ich über var1 matche, soll das Ergebnis so aussehen:
var1 var2 var3
1 4 A
2 5 B
4 6

Ich habe es früher immer so gemacht:

data datei_neu;
merge datei1 (in=da1) datei2;
by var1;
if da1;
run;
und es hat immer geklappt. Diesmal bekomme ich aber "zusätzliche" Zeilen. Wo könnte das Problem liegen?

Danke im Voraus.

Ich habe einfach mal die

Ich habe einfach mal die Dateinamen in a,b und c geändert. Dann geht's bei mir.

Hoffe, das hilft, Stefan.


DATA a;
  
INPUT var1 var2;
  
CARDS;  
1 4
2 5
4 6
;;
RUN;

DATA b;
  
INPUT var1 var3 $;
  
CARDS;
1 A
2 B
3 C
;;
RUN;

data c;
merge a (in=da1) b;
by var1;
if da1;
run;

proc print;
run;

merge

vielleicht haben sie in datei2 keinen Primärschlüssel bezüglich der Variablen var1 (es gibt bspw. 2 Datensätze mit var1=1).

In dem Fall dass beide Dateien keinen Primärschlüssel bezüglich der Variablen VAR1 haben liefert MERGE im Normalfall nicht die richtigen Ergebnisse. Sie sollten dann lieber mit PROC SQL arbeiten.

freundliche Grüße
Benedikt Muschik

Wie würde es dann mit proc

Wie würde es dann mit proc sql aussehen?

Lösung mit SQL

Mit SQL würde es so aussehen:

PROC SQL;
  
CREATE TABLE neu AS
    
SELECT l.var1, l.var2, r.var3
  
FROM a                  AS l /*linke Tabelle*/
    
LEFT JOIN b           AS r /*rechte Tabelle*/
    
ON a.var1 = b.var1
    ;
QUIT;

Viele Grüße
Barbara

Danke schön! :)

Danke schön! :)