Publié le :
Macro SASHELP

Macro Maxlengths - Calcul des longueurs de chaînes

Ce code est également disponible en : Deutsch English Español
En attente de validation
Cette macro interroge d'abord le dictionnaire des colonnes pour identifier les variables caractères spécifiées dans les paramètres. Elle génère ensuite dynamiquement une procédure SQL pour calculer la fonction `max(length())` sur ces variables. Enfin, elle stocke ces longueurs maximales dans des variables macro globales préfixées par 'max' (ex: &maxNomVariable), ce qui est utile pour redimensionner des colonnes ou optimiser le stockage.
Analyse des données

Type : SASHELP


Par défaut, la macro pointe sur SASHELP.CLASS, mais elle est conçue pour accepter n'importe quelle bibliothèque et table via les paramètres `libin` et `datain`.

1 Bloc de code
PROC SQL
Explication :
Récupération des métadonnées : sélectionne les noms des variables de type 'char' présentes dans la table cible et correspondant à la liste fournie dans le paramètre `vars`.
Copié !
1 PROC SQL noprint;
2 select name into :charvar1 - :charvar9999
3 from dictionary.columns
4 where LIBNAME=upcase("&LIBIN")
5 and memname=upcase("&DATAIN")
6 and type='char'
7 and findw(UPPER("&vars."), STRIP(UPPER(name))) ne 0
8 ;
9 QUIT;
10 %let numvars=&SQLOBS;
2 Bloc de code
PROC SQL Data
Explication :
Génération dynamique et exécution d'une requête SQL calculant la longueur maximale (`max(length(...))`) pour chaque variable identifiée. Les résultats sont stockés dans une table temporaire `maxlengths`.
Copié !
1 PROC SQL noprint;
2 create TABLE maxlengths as
3 select
4 max(LENGTH(&CHARVAR1)) as max&CHARVAR1
5 %IF &NUMVARS > 1 %THEN %DO;
6 %DO i=2 %to &NUMVARS;
7 , max(LENGTH(&&CHARVAR&i)) as max&&CHARVAR&i
8 %END;
9 %END;
10 from &LIBIN..&DATAIN
11 ;
12 QUIT;
3 Bloc de code
DATA STEP
Explication :
Lecture de la table `maxlengths` et création de macro-variables globales (via `CALL SYMPUT`) contenant les valeurs calculées, rendant ces informations disponibles pour la suite du programme SAS.
Copié !
1 DATA _NULL_;
2 SET maxlengths;
3 %DO i=1 %to &NUMVARS;
4 %global max&&CHARVAR&i;
5 call symput("max&&CHARVAR&i",max&&CHARVAR&i);
6 %END;
7 RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright 2016 Nada Wasi, Ann Rodgers, Kristin McCue. Distributed under GNU General Public License.


Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Bien que cette macro soit excellente pour l'optimisation, gardez à l'esprit que max(length()) renvoie la longueur de la chaîne sans les espaces de fin. Si vos données nécessitent de conserver des espaces significatifs, vous pourriez préférer la fonction vlength(). Pour un gain de performance ultime sur de très grandes tables, assurez-vous que la table d'entrée est indexée sur les colonnes les plus lourdes. »