Ich bin noch neu in SAS und DB2. Ich habe eine DB2-Tabelle mit einer Spalte, in der Werte gespeichert sind, die als Zeitstempel codiert sind. Ich versuche, Daten aus einem SAS-Datensatz in meinem Arbeitsverzeichnis in diese Spalte zu laden. Einige dieser Zeitstempel entsprechen jedoch Daten vor 01.01.1582 und können nicht als Datetime-Werte in SAS gespeichert werden. Sie werden stattdessen als Zeichenfolgen gespeichert.Einfügen in DB2 fom SAS-Dataset mit Passthrough SQL
Das bedeutet, wenn ich diese Werte in die DB2 - Tabelle laden möchte, muss ich sie zuerst in Timestamp mit der TIMESTAMP() DB2 - Funktion konvertieren, die, soweit ich weiß, Passthrough - SQL mit einer Ausführungsanweisung benötigt im Gegensatz zur Methode SAS ACCESS libname).
PROC SQL;
connect to db2 (user = xxxx database = xxxx password = xxxx);
execute (insert into xxxx.xxxx (var) values (TIMESTAMP('0001-01-01-00.00.00.000000'))) by db2;
disconnect from db2;
quit;
Wie kann ich erreichen, dies für alle Werte in den Quelldaten: Zum Beispiel, um einen einzelnen Wert ich folgendes zu schreiben? Eine Anweisung "select ... from" innerhalb des Befehls "execute" funktioniert nicht, da, soweit ich weiß, ich das SAS-Arbeitsverzeichnis nicht innerhalb der DB2-Verbindung referenzieren kann.
Letztendlich könnte ich ein Makro schreiben, das den obigen PROC-SQL-Block ausführt und es für jede Beobachtung innerhalb eines Datenschritts aufruft, aber ich frage mich, ob es einen einfacheren Weg dafür gibt. Das Ändern der Variablentypen ist keine Option.
Vielen Dank im Voraus.
Hallo, danke für die schnelle Antwort. Das war auch meine Idee, als ich darüber sprach, den proc sql mit einem Datenschritt aufzurufen. Ich frage mich jedoch: Warum verwenden Sie "" in der TIMESTAMP() -Aufruf? –
Gern geschehen. Ich kann nicht sagen, ob Ihre Frage zu einfachen oder doppelten Anführungszeichen gehört. Wenn Singles, gut, in Ihrem Code ist der Zeitstempel Wert eingeschlossen in einfachen Anführungszeichen, so dass die einfachen Anführungszeichen hier so sind, dass der aufgelöste Wert von 'dt_string' auch in Anführungszeichen in der aufgerufenen Abfrage eingeschlossen ist. Wenn doubles, naja, ich benutze sie nicht im 'timestamp'-Aufruf. Ich schließe den String einfach bis zu diesem Punkt, bevor ich ihn mit dem Wert von 'dt_string' verknüpfe. – user2877959
Es hat vorher nicht funktioniert, weil ich es mit TIMESTAMP (& var) und TIMESTAMP (" & var ") versucht habe Ich habe versucht Ihr TIMESTAMP (% str (% ') & var.% Str (%')). Danke noch einmal dafür! Ich nehme an, das funktioniert, weil das DB2 einfache Anführungszeichen erfordert ... ist das der Fall? Endlich ist es dann sicher zu schließen, dass dies nicht mit einem "einfachen" proc sql getan werden kann? –