2016-04-22 9 views
0

Während der Optimierung Code, ich mit einigen Problemen konfrontiert. Ich brauche ONE nurMerge mit if-Anweisung Datenschritt

data step1; 
merge table1(in=in1) table2(in=in2 rename=(field2=field22)); 
by field1; 
If (in1=1 and in2=1) then output;run; 

data step2; 
set step1; 
If field1=field22 then mark=1 output;run; 

proc sql; 
create table step3 as select sum(mark1) from step2 group by field1;quit;run; 

Ist es Daten Schritt möglich zu verwenden, es zu tun? Vielen Dank!

+0

Einige Beispieldaten wären hier nützlich. Ich bemerke, dass Sie in Ihrer Zusammenführung keine 'by'-Anweisung haben, so dass sie sich nach Zeilennummer zusammenfügt. Ist das beabsichtigt? – Longfish

+0

@Keith Vielen Dank für Aufmerksamkeit) Ich habe vergessen, es neu zu schreiben. In der Originalversion existiert es – bobby1232

+0

Können Sie eine Beschreibung des Zwecks des Programms hinzufügen? Wenn Sie das Programm betrachten, möchten Sie, wie oft der Wert von FIELD1 = FIELD2 in TABLE2 für Datensätze in TABLE1 zählt. Möchten Sie Werte von FIELD1 haben, die keine Übereinstimmungen haben, also wo sum (MARK1) = 0 ist? – Tom

Antwort

0

Sie möchten also nach FIELD1 gruppieren und zählen, wie viele Datensätze in TABLE2 haben FIELD1 = FIELD2, aber nur wenn FIELD1 auch in TABLE1 erscheint.

data want ; 
    do until (last.field1); 
    merge table1 (in=in1) table2(in=in2 where=(field1=field2)); 
    by field1; 
    count=sum(count,in1 and in2); 
    end; 
    keep field1 count; 
run; 

Wenn Sie alle Fälle finden wollen, wo es irgendwelche Werte, bei denen Field11 ne FIELD22 dann können Sie eine doppelte Schleife DOW hinzufügen.

data want ; 
    do until (last.field1); 
    merge table1 (in=in1) table2(in=in2) ; 
    by field1; 
    if in1 and in2 and (field11 ne field22) then missmatch=1; 
    end; 
    do until (last.field1); 
    merge table1 (in=in1) table2(in=in2) ; 
    by field1; 
    if missmatch then output; 
    end; 
run; 
+0

Ich muss zwei Tabellen zusammenführen (analog link Join), dann muss ich Marken machen und dann summieren. Das ist eine Art Business Case. Endgültige Idee ist es, eine Beobachtung aus mehreren Beobachtungen von Tabelle 2 zu überprüfen. Wenn eine der Beobachtungen aus Tabelle 2 (join auf table1.field1) nicht field1 = field22 entspricht, muss ich diese Beobachtungen sehen. Entschuldigung, wenn ich es nicht graduell erklären kann. Fängst du die Idee? – bobby1232

+0

Sie möchten also die vollständige Datensätze für Fälle, in denen es Miss-Matches gibt? – Tom

+0

Der Fall, dass ich nur Beobachtungen aus Tabelle1 brauche, die keine Übereinstimmungen aus Tabelle2 haben (Tabelle1.Feld11ne.Tabelle2.Feld2) – bobby1232