- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hallo,
ich greife vom SAS-EG direkt auf Oracle-Tabellen zu. Dabei habe ich festgestellt, dass die Umlaute nicht korrekt übernommen werden (z.B. '?' statt 'ß'). Wie stelle ich den Zeichensatz beim Zugriff von SAS auf Oracle-Tabellen ein. Die Oracle-Tabellen sind im UTF8-Format gespeichert.
Vielen Dank im Voraus und viele Grüße
Holger Pietschmann
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hallo,
haben Sie es schon mal mit einer encoding-Option im libname-Statement versucht?
Viele Grüße
Daniela Bastos Tsu
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hallo,
gibt es denn eine encoding-Option im LIBNAME Statement? Ich habe in der Dokumentation nämlich noch keine gefunden und ein Blind-Versuch mit ENCODING='utf8' brachte einen Syntax-Fehler.
Viele Grüße
Holger Pietschmann
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hallo Herr Pietschmann,
können Sie bitte näher beschreiben, was sie unter "direktem Zugriff" verstehen?
Erfolgt der Datenzugriff über OleDB oder ODBC im Enterprise Guide und nicht über die SAS Sitzung?
Evtl. gibt es dann im ConnectionString zur Datenbank eine Möglichkeit das Encoding festzulegen. Ohne den genauen Zugriffsweg zu kennen, kann ich ihnen an dieser Stelle leider nicht besser helfen.
VG, Andreas Menrath
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hallo Herr Menrath,
der Zugriff erfolgt über SAS/ACCESS for Oracle:
libname XY ORACLE user=abc password=def path='DB.X' SCHEMA=abc;
Ich habe schon die ganze, mir bekannte Dokumentation durchsucht, aber keine dafür verwendbare ENCODING-Option gefunden.
Viele Grüße
Holger Pietschmann
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
http://support.sas.com/kb/51/411.html
Zumindest scheint das Problem bei SAS bekannt zu sein. Evtl. kann hier dann auch der SAS Support bei technischen Problemen weiterhelfen.
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hallo Herr Menrath,
ganz herzlichen Dank für den offenbar entscheidenden Hinweis. Nachdem ich mir die SAS Note durchgelesen habe, habe ich an meinem lokalen PC versuchsweise einmal die Umgebungsvariable NLS_LANG = GERMAN gesetzt, und siehe da - jetzt funktioniert die Zeichencodeumsetzung im SAS EG einwandfrei.
Nochmals vielen Dank und viele Grüße
Holger Pietschmann
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Mit SAS-Eg haben sie ein UTF8 front-end, die dateien im Oracle sind auch UTF8.
Die frage soll sein wass da zwischen passiert. Es gibt die volgende stationen.
- SAS/Foundation (base) es gibt ein (multibyte) utf version und ein altmodische single-byte latin1 (often English codepage)
Mit "proc option; run;" sind alle base setting zu sehen.
- Die nächste ist en SAS/Access interface der met ein ODBC (OLE/DB) oder speciales Oracle-software communiciert
Die note 51411 ist eine setting im das bereich ODBC ausserhalb SAS. Ähnlich ist
http://support.sas.com/kb/31/170.html aber in deren wird auch die länge gennant. Im utf8 ist eien zeichen 1-4 bytes (mehrere) wo wir gelernt haben das ein karakter gleich ist am 1 byte. Eine advanced document ist:
https://support.sas.com/resources/papers/Multilingual_Computing_with_SAS_94.pdf
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hallo,
oben war die Frage nach dem Einstellung des Encoding im Libname-Statement.
Das geht so:
libname <logischer_name> "<physikalischer_Pfad>" outencoding="utf-8";
z.B.:
libname DemoLib "/tmp/demo" outencoding="utf-8";
oder
libname DemoLib "C:\temp\demo" outencoding="latin1";
Wenn das Encoding in dem Libname-Befehl nicht zur aktuellen Session passt, dann versucht SAS die Daten entsprechend zu konvertieren. Das klappt mehr oder weniger gut.
Gut klappt es bei den einfachen Fällen, wie äöüund ß oder auch éèê usw..
Schlecht klappt es bei den exotischen Fällen wie „Text“ (Luxus-Gänsefüßchen) oder – (Luxus-Bindestrich bzw. Gedankenstrich, z.B. aus Word). Die könnte man mit etwas gutem Willen noch konvertieren, bisher kommt dann ein Fehler, s.u..
Gar nicht geht die Umwandlung z.B. bei den slawischen Akzenten wie z.B. Š oder Č. Leider ist SAS dann mit dieser Umwandlung dermaßen überfordert, dass ein ERROR im Log gemeldet wird und der Data-Step die Bearbeitung abbricht. Aber ohne die Info, wo das Problem liegt, z.B. in welchen Datensatz. Der Log enthält dann nur den Text:
ERROR: Some character data was lost during transcoding in the data set
libref.datasetname. Either the data contains characters that are not
representable in the new encoding or truncation occurred during transcoding.
Die Note 52716 beschreibt das Problem, die Lösung passt leider nicht immer, z.B. nicht bei uns.
Gruß Hans