Publicado el :
Macro CREATION_INTERNE

Macro %mixcase para formatear texto en mayúsculas y minúsculas

Este código también está disponible en: Deutsch English Français
La macro `%mixcase` toma una variable de cadena de caracteres como entrada y la transforma para que respete una combinación de mayúsculas y minúsculas. Primero convierte toda la cadena a minúsculas, luego capitaliza la primera letra de la primera palabra. Después, recorre la cadena y capitaliza la primera letra de cada palabra siguiendo un delimitador especificado (por defecto: espacio, ampersand, asterisco, guion, coma, barra, punto y coma). Se aplican reglas de sustitución especiales para forzar ciertas palabras o abreviaturas (como 'II', 'III') a mayúsculas y otras (como 'or', 'for', '-et-', '-du-', '-de-') a minúsculas, incluso después de guiones. Un parámetro `target` permite especificar una nueva variable para almacenar el resultado. La macro está diseñada para ser utilizada dentro de un DATA STEP para estandarizar la presentación textual.
Análisis de datos

Type : CREATION_INTERNE


La macro `%mixcase` es una utilidad de transformación de cadena de caracteres y no gestiona directamente la lectura o creación de conjuntos de datos. Opera sobre una variable de cadena de caracteres existente, pasada como argumento, en el contexto de un DATA STEP. Por lo tanto, la fuente de los datos procesados dependerá de cómo se alimente el DATA STEP que llama a la macro (por ejemplo, creación de datos internos, lectura de SASHELP, o importación de archivos externos).

1 Bloque de código
Macro %mixcase
Explicación :
Este bloque define la macro `%mixcase`. Toma como parámetros la variable de cadena `var` a procesar, una cadena `dlim` que especifica los delimitadores de palabras (por defecto ' &-*+,/;'), una variable `target` opcional para el resultado, y un parámetro `upper` (que está definido pero no se usa dinámicamente en el cuerpo de la macro para las capitalizaciones especiales). La macro comienza convirtiendo la totalidad de la variable `var` a minúsculas. Luego capitaliza la primera letra de la primera palabra. Para las palabras siguientes, capitaliza la primera letra si va precedida por un delimitador especificado. Después se aplican reglas de sustitución para casos específicos, forzando ciertas subcadenas a mayúsculas (ej: ' III', ' II') o a minúsculas (ej: ' or ', ' for ', '-et-', '-du-', '-de-') para refinar la combinación de mayúsculas y minúsculas del texto, garantizando uniformidad en la presentación.
¡Copiado!
1%macro mixcase ( var , dlim=' &-*+,/;' , target=, upper=II III ) ;
2 drop __i ;
3 %IF %quote(&target) ^= %THEN
4 %DO ;
5 &target = &var ;
6 %let var = &target ;
7 %END ;
8 &var = lowcase ( &var ) ;
9 substr (&var,1,1) = upcase(substr(&var,1,1)) ;
10 DO __i = 1 to LENGTH ( &var ) - 1 ;
11 IF index ( &dlim , substr(&var,__i,1) ) THEN
12 substr(&var,__i+1,1) = upcase(substr(&var,__i+1,1)) ; END ;
13 *-- SPECIAL CASES: ALL UPPER CASE ;
14 IF INDEX(&var,' Iii')>0 THEN
15 SUBSTR(&var,INDEX(&var,' Iii'),4)=' III';
16 IF INDEX(&var,' Ii')>0 THEN
17 SUBSTR(&var,INDEX(&var,' Ii'),3)=' II';
18 
19 *-- ALL LOWER CASE;
20 IF INDEX(&var,' Or ')>0 THEN
21 SUBSTR(&var,INDEX(&var,' Or '),4)=' or ';
22 IF INDEX(&var,' For ')>0 THEN
23 SUBSTR(&var,INDEX(&var,' For '),5)=' for ';
24 IF INDEX(&var,'-Et-')>0 THEN
25 SUBSTR(&var,INDEX(&var,'-Et-'),4)='-et-';
26 IF INDEX(&var,'-Du-')>0 THEN
27 SUBSTR(&var,INDEX(&var,'-Du-'),4)='-du-';
28 IF INDEX(&var,'-De-')>0 THEN
29 SUBSTR(&var,INDEX(&var,'-De-'),4)='-de-';
30%mend mixcase ;
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.
Información de copyright : %mixcas written by Ian Whitlock.