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 | %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 ; |