Type : CREATION_INTERNE
La macro `%mixcase` est une utilitaire de transformation de chaîne de caractères et ne gère pas directement la lecture ou la création de jeux de données. Elle opère sur une variable de chaîne de caractères existante, passée en argument, dans le contexte d'un DATA STEP. Par conséquent, la source des données traitées dépendra de la manière dont le DATA STEP appelant la macro est alimenté (par exemple, création de données internes, lecture de SASHELP, ou importation de fichiers externes).
| 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 ; |