LesezeichenAbonnierenRSS-Feed abonnieren
HPietschmann
Fluorite | Level 6

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

 

 

 

8 ANTWORTEN 8
DanielaNRW
Obsidian | Level 7

Hallo,

 

haben Sie es schon mal mit einer encoding-Option im libname-Statement versucht?

 

 

Viele Grüße

Daniela Bastos Tsu

HPietschmann
Fluorite | Level 6

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

AndreasMenrath
Pyrite | Level 9

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

HPietschmann
Fluorite | Level 6

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

AndreasMenrath
Pyrite | Level 9
Hilft ihnen diese SAS Note weiter?
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.
HPietschmann
Fluorite | Level 6

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

 

jakarman
Barite | Level 11

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

---->-- ja karman --<-----
basefan
Obsidian | Level 7

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

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Diskussionsstatistiken
  • 8 Antworten
  • 4593 Aufrufe
  • 3 Kudos
  • 5 in Unterhaltung