Publicado el :

Ejemplo de uso de UTF-8 en SAS

Este código también está disponible en: Deutsch Français
En espera de validación
El programa ilustra el uso de la función KCVT para convertir cadenas hexadecimales en caracteres UTF-8. Crea un conjunto de datos a partir de SASHELP.CLASS, reemplazando algunos valores con caracteres especiales (japonés, kannada) y símbolos. Luego define un formato personalizado y una plantilla de gráfico (PROC TEMPLATE) para mostrar estos datos. Finalmente, PROC SGRENDER se utiliza para generar el gráfico que muestra los datos con los caracteres Unicode.
Análisis de datos

Type : MIXTE


El script lee las primeras 6 observaciones de la tabla SASHELP.CLASS. Luego modifica las variables 'name' y 'sex' para insertar caracteres y símbolos Unicode, creando así una nueva tabla de trabajo 'uni'.

1 Bloque de código
DATA STEP
Explicación :
Este bloque utiliza un DATA STEP _null_ y la función KCVT para convertir representaciones hexadecimales de caracteres Unicode (letras griegas) en cadenas de caracteres codificadas en UTF-8. Estas cadenas se almacenan luego en variables macro (ulabel, udf_v1, udf_v2) para su uso posterior.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este DATA STEP crea la tabla 'uni' leyendo 6 líneas de sashelp.class. Asigna una etiqueta Unicode a la variable 'age' y modifica las variables 'name' y 'sex' para insertar caracteres Katakana, Kannada y símbolos de género Unicode, demostrando el manejo de datos multilingües.
¡Copiado!
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 Bloque de código
PROC FORMAT
Explicación :
Este procedimiento define un formato personalizado `utf8_udf`. Este formato mapea los valores numéricos 12 y 13 a las cadenas de caracteres Unicode (letras griegas) almacenadas previamente en las variables macro. Los otros valores se muestran con un formato estándar.
¡Copiado!
1PROC FORMAT;
2 value utf8_udf
3 12 = &udf_v1
4 13 = &udf_v2
5 OTHER= [Best6.]
6 ;
7RUN;
4 Bloque de código
PROC TEMPLATE
Explicación :
El procedimiento TEMPLATE define un modelo de gráfico estadístico personalizado llamado `uni_utf8`. Este modelo crea un diagrama de dispersión (scatterPlot) y está configurado para mostrar los valores de la variable 'name' como etiquetas de datos, utilizando una fuente compatible con Unicode.
¡Copiado!
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 Bloque de código
PROC SGRENDER
Explicación :
Este bloque final utiliza el procedimiento SGRENDER para generar un gráfico a partir del modelo `uni_utf8` y el conjunto de datos `uni`. El formato `utf8_udf` se aplica a la variable 'age' para mostrar los caracteres griegos correspondientes. La instrucción `ods graphics` restablece los parámetros gráficos.
¡Copiado!
1ods graphics / reset;
2PROC SGRENDER template=uni_utf8 DATA=uni;
3 FORMAT age utf8_udf10.;
4RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.