Veröffentlicht am :

Beispiel für die Verwendung von UTF-8 in SAS

Dieser Code ist auch verfügbar auf: Español Français
Wartet auf Validierung
Das Programm veranschaulicht die Verwendung der KCVT-Funktion zur Konvertierung von Hexadezimalzeichenfolgen in UTF-8-Zeichen. Es erstellt einen Datensatz aus SASHELP.CLASS, indem es einige Werte durch Sonderzeichen (Japanisch, Kannada) und Symbole ersetzt. Anschließend definiert es ein benutzerdefiniertes Format und eine Grafikvorlage (PROC TEMPLATE), um diese Daten anzuzeigen. Schließlich wird PROC SGRENDER verwendet, um die Grafik zu generieren, die die Daten mit den Unicode-Zeichen anzeigt.
Datenanalyse

Type : MIXTE


Das Skript liest die ersten 6 Beobachtungen der SASHELP.CLASS-Tabelle. Anschließend ändert es die Variablen 'name' und 'sex', um Unicode-Zeichen und -Symbole einzufügen, wodurch eine neue Arbeitstabelle 'uni' erstellt wird.

1 Codeblock
DATA STEP
Erklärung :
Dieser Block verwendet einen DATA STEP _null_ und die KCVT-Funktion, um hexadezimale Darstellungen von Unicode-Zeichen (griechische Buchstaben) in UTF-8-kodierte Zeichenfolgen zu konvertieren. Diese Zeichenfolgen werden dann in Makrovariablen (ulabel, udf_v1, udf_v2) zur späteren Verwendung gespeichert.
Kopiert!
1DATA _null_;
2 call symput('ulabel', kcvt('03b300200398'x, 'utf-16be', 'utf-8'));
3 call symput('udf_v1', kcvt('03b100200393'x, 'utf-16be', 'utf-8'));
4 call symput('udf_v2', kcvt('03c000200394'x, 'utf-16be', 'utf-8'));
5RUN;
2 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA STEP erstellt die Tabelle 'uni', indem er 6 Zeilen aus sashelp.class liest. Er weist der Variablen 'age' eine Unicode-Beschriftung zu und ändert die Variablen 'name' und 'sex', um Katakana-, Kannada-Zeichen und Unicode-Geschlechtssymbole einzufügen, was die Verwaltung mehrsprachiger Daten demonstriert.
Kopiert!
1DATA uni;
2 attrib age label="&ulabel"; /* Data set label in utf-8 */
3 attrib sex LENGTH=$4; /* NOTE: These are byte lengths: not char lengths */
4 attrib name LENGTH=$32;
5 SET sashelp.class(obs=6);
6 IF _n_ = 2 THEN /* Alice in Katakana: already utf-8 HEX values */
7 name='E382A2E383AAE382B9'x;
8 IF _n_ = 4 THEN /* Carol in Kannada: utf-8 literals directly typed in editor */
9 name= 'ಕರೂಲ್' ;
10 sex = ifc(sex='M', kcvt('2642'x, 'u16b', 'utf8'),
11 kcvt('2640'x, 'u16b', 'utf8')); /* NOTE: short encoding names */
12RUN;
3 Codeblock
PROC FORMAT
Erklärung :
Diese Prozedur definiert ein benutzerdefiniertes Format `utf8_udf`. Dieses Format ordnet die numerischen Werte 12 und 13 den Unicode-Zeichenfolgen (griechische Buchstaben) zu, die zuvor in den Makrovariablen gespeichert wurden. Andere Werte werden mit einem Standardformat angezeigt.
Kopiert!
1PROC FORMAT;
2 value utf8_udf
3 12 = &udf_v1
4 13 = &udf_v2
5 OTHER= [Best6.]
6 ;
7RUN;
4 Codeblock
PROC TEMPLATE
Erklärung :
Die TEMPLATE-Prozedur definiert eine benutzerdefinierte statistische Grafikvorlage namens `uni_utf8`. Diese Vorlage erstellt ein Streudiagramm und ist so konfiguriert, dass die Werte der Variablen 'name' als Datenbeschriftungen unter Verwendung einer Unicode-kompatiblen Schriftart angezeigt werden.
Kopiert!
1PROC TEMPLATE;
2 define statgraph uni_utf8;
3 beginGraph;
4 entryTitle 'Unicode in Data Values using UTF-8 session';
5 layout overlay / xaxisopts=(labelAttrs=(size=12 weight=bold));
6 scatterPlot x=age y=height / name="sp1" group=sex
7 datalabel=name
8 dataLabelAttrs=(family=GraphUnicodeText:fontFamily size=16);
9 discreteLegend "sp1" / title="Sex" valueAttrs=(size=15 weight=bold)
10 location=inside halign=right valign=bottom;
11 endLayout;
12 endGraph;
13 END;
14RUN;
5 Codeblock
PROC SGRENDER
Erklärung :
Dieser letzte Block verwendet die SGRENDER-Prozedur, um eine Grafik aus der Vorlage `uni_utf8` und dem Datensatz `uni` zu generieren. Das Format `utf8_udf` wird auf die Variable 'age' angewendet, um die entsprechenden griechischen Zeichen anzuzeigen. Die Anweisung `ods graphics` setzt die Grafikparameter zurück.
Kopiert!
1ods graphics / reset;
2PROC SGRENDER template=uni_utf8 DATA=uni;
3 FORMAT age utf8_udf10.;
4RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.