Macro addvar - Découpage de variables texte

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Débutant
Publié le :
La macro `addvar` analyse une variable donnée dans une table en entrée. Si la longueur du contenu dépasse `maxlen` (défaut 200), elle utilise une macro externe `%gmModifySplit` pour préparer le découpage, puis répartit le texte dans plusieurs nouvelles variables indexées en utilisant un séparateur défini. Si la longueur est inférieure à la limite, la variable est simplement formatée et copiée. Attention, la macro modifie la table d'entrée (`&in_data`) si le découpage est activé.
Analyse des données

Type : EXTERNE


Les données sont définies par le paramètre macro `in_data`. Le script s'attend à recevoir une table existante.

1 Bloc de code
PROC SQL
Explication :
Calcul de la longueur maximale de la variable texte dans la table d'entrée pour déterminer si le traitement de découpage est requis.
Copié !
1PROC SQL noprint;
2 select distinct max(LENGTH(&in_var)) into :lngth
3 from &in_data;
4QUIT;
2 Bloc de code
DATA STEP Data
Explication :
Exécuté si la longueur dépasse la limite : Préparation de la table d'entrée en renommant la variable et en appelant la macro externe `%gmModifySplit`.
Copié !
1DATA &in_data;
2 SET &in_data(rename=&in_var=_&in_var._);
3 %gmModifySplit(var=_&in_var._, width=&maxlen);
4RUN;
3 Bloc de code
PROC SQL
Explication :
Détermination du nombre de variables supplémentaires nécessaires en comptant les occurrences du séparateur.
Copié !
1PROC SQL noprint;
2 select cats(max(count(_&in_var._, "&split"))) into :varn
3 from &in_data;
4QUIT;
4 Bloc de code
DATA STEP Data
Explication :
Création de la table de sortie finale. Le texte est éclaté dans un tableau de variables (`vlst`) via la fonction `scan`.
Copié !
1DATA &out_data;
2 SET &in_data;
3 array vlst{*} $200 &out_pre. &out_pre.1 - &out_pre.&varn;
4 DO i=1 to %eval(&varn+1);
5 vlst(i)=scan(_&in_var._, i, "&split");
6 END;
7 drop _&in_var._ i;
8RUN;
5 Bloc de code
DATA STEP Data
Explication :
Alternative (ELSE) : Si aucun découpage n'est nécessaire, la table de sortie est créée avec la variable simplement ajustée à la longueur standard.
Copié !
1DATA &out_data;
2 SET &in_data(rename=&in_var=_&in_var._);
3 LENGTH &out_pre $200;
4 &out_pre=_&in_var._;
5 drop _&in_var._;
6RUN;
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 : PAREXEL INTERNATIONAL LTD / Janssen Research & Development, LLC