Failed to transcode data from U_UTF8_CE to U_LATIN9_CE?!

Ähnliche Dokumente
QMF Tabelle Q.OBJECT_DATA in DB2

Wie kann ich die Ausgabe als Excel speichern?

viele ähnliche Datensätze automatisch einlesen

Import von Text-Dateien. Einzelne Wörter einlesen.

Einlesen von Textdateien mit sehr langen Zeilen

Spalten aufsummieren?!

Ansprechen einer Anzahl von Variablen über einen Schleifendurchlauf

Alter berechnen mit Base SAS

ODS RTF Titel in Spalten linksbündig darstellen

zusammenfassen von Text variablenin einer Variable bei unterschiedlicher Variablenanzahl

Änderung der Ordnung der Variablen in den SAS Datensatz

Jede Kombination von 7 Spalten erzeugen

Mehrere Datensätze zu einem Datensatz zusammenführen

Hallo Jessi, wenn ich das. DATA aufg3_b; vari='<.0001'; IF &wil_two_test. le vari THEN pwert=0.0001;

EG 4.2: Pfade zu verlinkten SAS-Files als relative Pfade speichern!?

Formatierung beim Einlesen

Erzeugung von Zufallszahlen mit RANUNI()

rechtsbündige Leerzeichen mit einlesen im Datastep

SAS BASE LOG Fragen. Antwort, Teil 1

Umbenennung von Spaltennamen über Schleife(n)

SUBSTRING - wo liegt mein Fehler?

IMPORT / EXPORT Access

Zeilen in SAS-Datensatz einfügen

Dynamisch Makros aufrufen

Zeit-Macro-Variablen, passend zu einem Tag

Exportieren in excel sheets

Kreuztabelle als Data-Set so wie aus proc tabulate

Berechnung der Dauer eines SAS Makros?

Berechnung der Arbeitstage

Funktion: Tabelleninhalte nacheinander durch eine Funktion schicken

Hilfe bei Programmierung mit SAS

Erstellen von Dateilisten - Erfasssen von Dateiattributen

Eine Variable in mehrere aufteilen

Allman-Einrückungsstil versus 1TBS bei SAS-Base-Programmen

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

Wie überprüfen, ob eine Datei existiert?

Anhang zur Frage Data statement und Proc Statement

SPDS-Problem - proc summary auf View mit by-variable - Sortierung wird verlangt

Auslesen von SAS Systeminformationen über die aktuelle Log- Ausgabe

Merge mit nicht eindeutigen by-variablen

Inhalt. Besuchen Sie uns im Internet unter Autor: Erich Vonach Stand: Sokrates-WAS Export und Import

Dateien trennen und zusammenfügen

News Artikel Foren Projekte Links Über Redscope

» ASCII = American Standard Code for Information Interchange.» ASCII ist Standard in Windows und Unix (und Unix-Derivaten).» ASCII ist eigentlich ein

Inhalt. Besuchen Sie uns im Internet unter Autor: Erich Vonach Stand: WAS-Export und Import

Zugriff aus Oracle via Proc SQL: Performanceprobleme

Dieser Artikel stammt aus dem Magazin von C++.de (

spezielle Summen bilden und proc corr

Programminhalte extrahieren und modifizieren mit SAS. Katja Glaß

Fehlermeldung, wenn Anzahl der %do der %end entspricht - was läuft falsch?

Excel sheet input / Zufallsgenerator/ Excel sheet output

Von SAS nach SPSS und umgekehrt

Macro erzeugt Dateifilter

Programme laufen im Programm-Editor, aber nicht im Enterprise Guide?

Dateneingabe und Transformation Übersicht

ASV-Schülerdaten ins Update 12 einlesen

PROC IMPORT. Wie sehen die ersten Zeilen. Mh, eigentlich. EWie sieht die Daten Datei aus? Auszug aus Datei PROC IMPORT

Tutorial 7 TEIL 2/2. Untersuchung von ebusiness Anwendungen auf der Basis des IBM WebSphere Developer V 7.0

PROC GCHART HBAR Zeilenumbruch in Achsenbeschriftung

Grundlagen der Datenverarbeitung

Road Account Maut Control - Version 1.60

Wareneingang und Inventur mit MDE (Mobile Daten Erfassung) CipherLab 8200

Benutzerhandbuch WSCAD Datenpunktliste Konvertierung nach Datenpunktliste VDI 3814

Installationsanweisungen

Modell Bahn Verwaltung. Tutorial. Decoder Datei. Min. Programm Version 0.65, März w w w. r f n e t. c h 1 / 10

Inhalt. Einführung in die Strukturierte Programmierung 15

Langfassung des Beitrags für die 11. KSFE

Spezifikationen für die Nutzung der Webanwendung (inkl. CSV/TXT-Datei) für Antragsteller von SSR-Nummern

Allgemeiner Import-Ablauf

Brainfuck Interpreter für ZX81

Rückgabewerte von Methoden

Mit Formatierungszeichen arbeiten

Tücken bei der Erstellung von Zufallszahlen mit RANUNI

Typo3- Schulung für Redakteure an der Hochschule Emden/Leer

GEVITAS MobileCatalog

Anleitung für Korrektoren. Mac OS X. Stand

CD-Rom A2000 Octagon 2008

In dieser Übung wird auf server01 eine Netzwerkfreigabe erstellt und NTFS Berechtigungen festgelegt.

Teil I Debuggen mit gdb

Ermittlung der übereinstimmenden Variablen (-Namen) zweier Datasets

EuCaSoft Protoview (Elektronisches Journal)

Übersicht Shell-Scripten

NICHT TRIVIAL: MAKROVARIABLEN - GLOBAL ODER LOKAL

SAS-Tipp #6: Schneller als Proc Summary

Drei Fragezeichen 183

CIS - Info CIS - Info CIS - Info

FlexiForm 2 Datenexport und Import in Excel

Transkript:

News Artikel Foren Projekte Links Über Redscope Join List Random Previous Next Startseite Foren Allgemeine Fragen zu SAS Failed to transcode data from U_UTF8_CE to U_LATIN9_CE?! 15 January, 2014-16:51 Student-Swen Liebe redscope-freunde, ich habe mal wieder eine Frage an euch zu der ich über die Suchfunktion und google leider passende Hilfe gefunden habe. Ich hoffe ihr könnt mir helfen! Ich arbeite mit Daten auf die ich nur per "kontrollierter Datenfernverarbeitung" zugreifen kann. In der Praxis sieht es so aus, dass ich im Büro einen Berg Code schreibe und diese auf einem synthetischen Datensatz auf meinem Windows-Rechner teste. Läuft der Code durch, schicke ich diese zum "Dateninhaber". Ein Mitarbeiter vor Ort führt dann meine Codes auf dem Original- Datensatz aus. Bei denen läuft SAS aber auf einem UNIX-Server, was anscheind teilweise zu Problemen führt. Beim Dateninhaber gibt SAS die Fehlermeldung aus dem Anhang aus. Kann mir einer erklären was das für ein Fehler ist und wie ich meinen Code so ändere, dass er beim Dateninhaber auf dem UNIX-System läuft? Vielen Dank für eure Hilfe Swen Anhang SASerror.jpg Größe 65.34 KB Foren: Allgemeine Fragen zu SAS Sprach- bzw. Zeichensatz-Einstellung 16 January, 2014-11:18 HansKneilmann meiner Meinung nach liegt das nicht daran, dass der Windows-Rechner-Code auf einem UNIX- Server laufen soll, sondern an dem Sprach-bzw. Zeichensatz-Einstellungen beider Rechner. Die lange Fehlermeldung sagt aus, dass SAS ein Problem beim übersetzen von UTF8 nach Latin9 hat. UTF8 kenne ich auch als Unicode und bei Unicode ist so ziemlich alles an Sonderzeichen möglich, was man sich so vorstellen kann. Im Gegensatz dazu ist Latin9 nur ein etwas aufgepeppter ASCII- Zeichensatz. Man nennt Latin9 auch Westeuropäisch, weil dort z.b. die französischen Spezial-Buchstaben enthalten sind. Es fehlen z.b. die polnischen oder die ungarischen Spezial-Buchstaben, die sind in Latin2 enthalten, aber dort fehlen die französischen... Im UTF8-Zeichensatz sind sie alle drin, auch die Luxus-Bindestriche (EM-Dash und EN-Dash) oder die Luxus-Gänsefüßchen ( Text statt "Text" und Text statt 'Text') die man z.b. mit Word in Texte

einfügen kann. Beim Umsetzen von Texten bzw. von Programm-Code, der in UTF8 codiert ist in eine Datei, die in Latin9 codiert ist gibt es logischerweise Zeichen, die nicht umsetzbar sind. Genau diese produzieren die oben genannte Fehlermeldung. Die Abhilfe ist eigentlich ganz einfach: Bei Systeme müssen die gleiche Codierung verwenden. Entweder beide UTF8 (bzw. U_UTF8_CE) oder beide Latin9 (bzw. U_LATIN9_CE). Oder im Quellsystem muss man peinlich genau darauf achten keine falschen Zeichen zu verwenden. Oder schon beim exportieren der Daten bzw. des Codes aus dem Quellsystem die Umcodierung machen, dadurch tritt der Transcoding-Fehler früher, beim Verursacher, auf und kann im Quellsystem behoben werden. Beispiel Einlesen einer Latin2-codierten-Datei: infile Datei LRECL=777 dlm=";" pad missover encoding="latin2" firstobs= Beispiel Schreiben einer Latin2-codierten-Datei: file "&filename." encoding="latin1"; Beispiel einer Unicode- bzw. UTF8-Libref (alle Data Sets dort sind autom. UTF8-codiert): libname dmadm_u8 "&XXDIR._u8" outencoding="utf-8"; Beispiel für die Ziel-Zeile im Start-Ikon einer 'normalen' SAS-Session auf einem Win7-PC: C:\DWH\SAS93\x86\SASFoundation\9.3\sas.exe -CONFIG C:\DWH\SAS93\x86\SASFoundation\9.3\nls\en\SASV9.CFG Beispiel für den Start einer 'Unicode' SAS-Session auf einem Win7-PC C:\DWH\SAS93\x86\SASFoundation\9.3\sas.exe -CONFIG C:\DWH\SAS93\x86\SASFoundation\9.3\nls\u8\SASV9.CFG (man beachte den kleinen feinen Unterschied: nls\u8 statt nls\en) P.S.: Unser Daten lieferndes System ist unicode-fähig und unser (SAS-) DWH ist es nicht, d.h. mit der Umcodierung bzw. mit dem Transcoding-Fehler habe ich länger gekämpft, bis alles zufriedenstellend lief. Fehler bereits beim Laden einiger Makros Hallo Herr Kneilmann, 16 January, 2014-09:39 Student-Swen vielen Dank für die prompte Hilfe! Leider verstehe ich ihre Codes nur bedingt. Ich verstehe aber das Problem. Eine Sache ist bei meinem ersten Post nicht so klar geworden wie ich dachte: Der Fehler wird nicht erst beim schreiben eines Datensatzes angezeigt, sondern bereits beim einlesen einiger Makros. Ich habe mein Projekt in einzelne Module unterteilt und "missbrauche" dafür Makros. Vereinfacht sieht der Code wie folgt aus.

/*Schritt 1: Makros einlesen*/ %macro A; code... %mend;... %macro Z; code... %mend; /*Schritt 2: Makros ausführen*/ data bib.data_neu; set bib.data_alt; %A;... %Z; run; Das ganze halt nur auf knapp 35.000 Codezeilen, was eine händische Kontrolle unmöglich macht. Der Fehler wird bereits beim ersten Schritt (Makros einlesen) angezeigt. D.h. im Code selbst müssen schon Sonderzeichen enthalten sein, die bei der ausführenden Stelle nicht verarbeitet werden können. Der Code ist zu 99% selbst geschrieben. Sonderzeichen verwende ich in SAS generell nicht. Allerdings sind die Variablenlabels aus einer Excel-Datei (Datensatzbeschreibung) per Copy & Paste übernommen worden. Ich vermute, dass der Fehler daher kommt. Gibt es eine Möglichkeit nach diesen Sonderzeichen gezielt zu suchen und diese zu löschen? Ich kann leider keinen Einfluss darauf nehmen, wie SAS bei der ausführenden Stelle gestartet wird oder welcher Zeichensatz verwendet wird. Viele Grüße Swen Lösungs-Ansätze 16 January, 2014-10:41 HansKneilmann das es im vorliegenden Fall um den Programm-Code und nicht um Daten geht ist schon klar geworden, aber meine Erfahrung bezieht sich nur auf Daten, nicht auf Code. Aber Programm-Code ist auch nur Text und Texte sind natürlich auch nichts anderes als Daten... Das Problem mit der Menge an Codezeilen kenne ich gut: Hier bei uns gibt es so ca. 595.000 Codezeilen und das größte Einzelstück hat ca. 50.000 Zeilen (eigentlich mehr, einiges ist ausgelagert...) und ist auch in Macros unterteilt (kein Missbrauch, sondern eine sinnvolle Sache!). Auch klar war, dass das Ziel-System außerhalb Deines Einflussbereiches liegt und Du die Lösung dort nicht findest. Der Fehler wird bereits beim ersten Schritt (Makros einlesen) angezeigt. D.h. im Code selbst

müssen schon Sonderzeichen enthalten sein, (..) Auch das war schon aus dem 1. Beitrag klar. Zurück zu den Lösungs-Ansätzen: Du arbeitest mit dem SAS-EG. Ich würde den EG nicht mehr im Unicode-Modus sondern 'normal' starten. Beim alten SAS Display Manager erfolgt das Umschalten wie ich es oben mit den zwei Ziel-Zeilen des Windows-Start-Ikons gezeigt habe. Dann kann Dein EG keine falschen Zeichen an das SAS auf dem Unix-System schicken. Wie bringst Du den Code zum Ziel-System? Gibt es eine Möglichkeit nach diesen Sonderzeichen gezielt zu suchen (..) Mein Ansatz zur Code-Prüfung wäre: Programm-Code als Text-Datei exportieren, dann einlesen in ein SAS Data Set (alles noch Unicode bzw. UTF-8). Dann das SAS Data Set umsetzen von outencoding="utf-8" nach outencoding="latin1": libname rein_u8 "Quell_Pfad" outencoding="utf-8"; libname raus_l9 "Ziel_Pfad" outencoding="latin9"; /* auf Windows data raus_l9.code_l9; set rein_u8.code_u8; /* in code_u8 muss der Programmcode, eing run; Da der Code Schrott-Zeichen enthält, wird dieses Umsetzen abbrechen, das ist klar. ABER es bricht genau an der ersten Problem-Stelle ab! Das heißt das Ausgabe Data Set aus dem Umsetz-Data-Step enthält genauso so viele Sätze/Zeilen/Observations, wie SAS erfolgreich umsetzen bzw. schreiben konnte. Damit kannst Du das 1. Problem beseitigen... Ich weiß, dass ist kein schöner Weg, aber es ist immerhin ein Weg. Nächster Ansatz zur Code-Prüfung wäre: Programm-Code als Text-Datei exportieren, dann einlesen in ein SAS Data Set (alles noch Unicode bzw. UTF-8). Dann mit einem Data Step und translate alle guten Zeichen (a-z, A-Z, 0-9 etc pp) löschen. Was übrig bleibt ist der Schrott, den man mit Edit->Find im Original-Programm-Code suchen und ändern kann... Auch kein schöner Weg, aber... Danke! Hallo Hans, 17 January, 2014-09:19 Student-Swen vielen Dank für die Hilfe! ich konnte mit Deinen Tipps die problematischen Zeilen identifizieren. Habe dann die labels händisch neu geschrieben und ersetzt. Jetzt funktioniert es. Auch wenn ich optisch keinen Unterschied erkenne ;) Viele Grüße

Swen Super 17 January, 2014-12:21 HansKneilmann prima, dass es geklappt hat. Das mit dem keinen Unterschied sehen könnte an dem Gedankenstrich und Bindestrich bzw. en dash und em dash liegen. Auch die Gänsefüßchen (z.b. die eine Zeile hier drüber) sind nicht sofort als unterschiedlich zu erkenn, obwohl sie es sind. Es gibt in den Zeichensätzen mittlerweile einiges an Stolpersteinen.