LesezeichenAbonnierenRSS-Feed abonnieren
FK55
Fluorite | Level 6

Aufgrund einer Umstellung in unseren Datenbanken haben sich in einer Datenbank die Formate der Vertragsnummern geändert so dass der Join nicht mehr funktioniert. In der einen (alten) DB mit den historischen Daten sind die Nummern im Textformat (11-stellig mit 2 führenden Nullen), in der anderen (neuen) DB als Zahl (9-stellig) hinterlegt. Ich habe zwar über die Funktion SUBSTR die führenden Nullen eliminiert, meine Versuche, das Textformat anschließend in ein Zahlenformat umzuwandeln, sind aber gescheitert. Gibt es eine Möglichkeit, den Join auch mit unterschiedlichen Formaten durchzuführen? Wenn nein, wie kann ich das Format so umwandeln, dass ich die Tabellen joinen kann?

 

Vielen Dank für eine Antwort

FK55 

4 ANTWORTEN 4
AHuesing
Calcite | Level 5

Eine Variable kann nur entweder numerisch oder alphanumerisch sein. Am einfachsten ist hier wahrscheinlich, in den alten Daten eine zusätzliche neue numerische Variable zu erzeugen und das geht z..B. mit:

 

dATA alt;

SET alt;

neueID=1* ID;

* dazu müssen noch nicht einmal führende Nullen entfernt werden.;

 

RUN;

 

 

GrischaPfister
Fluorite | Level 6

Hallo FK55,

 

es gibt zwei Möglichkeiten, entweder Du passt die Query an, oder die Daten werden so geändert, dass die VN wieder den gleichen Typ haben.

Zu Ansatz 1:

Das JOIN-Kriterium ist die VN, d.h. entweder wird die alte in eine Zahl, oder die neue in Text umgewandelt, der erste Ansatz sieht dann z.B. so aus:

Data Work.Alt;
  vn = "00000000011";
  value1 = 111;
Run;

Data Work.Neu;
  vn = 11;
  value2 = 222;
Run;

Proc Sql;
  Create Table work.Combined As
    Select b.vn, a.value1, b.value2
      From Work.Alt As a, Work.Neu as B
      Where input(a.vn,best.) = b.vn
  ;
Quit;

In Work.Alt ist die VN ein Text, in Work.Neu eine Zahl. In der Where-Bedingung wird dann die alte VN in eine Zahl umgewandelt, damit der Vergleich passt. Ob das eine dauerhafte Lösung ist, hängt auch z.B. von der Performance ab, die Frage ist, wieviele Sätze verarbeitet werden...

 

Hofffe das hilft weiter, viele Grüße,

 

Grischa

jakarman
Barite | Level 11

Wenn es sich um eine DBMS-Datenbank handelt, stellen Sie sicher, dass die Schlüssel vom DBMS verarbeitet werden können.

Wenn Sie versuchen, die Schlüssel in SAS zu konvertieren, bringen SQL-Einschränkungen alle Daten auf den SAS-Computer.
Die Leistung der Verarbeitung wird durch die Übertragung von Daten drastisch beeinträchtigt. Wenn es gelingt.

Bei kleinen Dateien, bei denen alles in den Speicher passt, reicht jeder Code aus, der funktioniert.

---->-- ja karman --<-----
Kurt_Bremser
Super User

Wir hatten mal ein ähnliches Problem (Umstellung Schilling zu Euro). Unsere Lösung war es, die alten Tables umzubenennen (führendes Underline), und jeweils einen View mit dem originalen Namen zu erzeugen, der die Umwandlung macht.