Publié le :
Macro EXTERNE

Macro pour retourner la longueur d'une variable SAS

Cette macro permet d'obtenir la longueur d'une variable SAS©. Elle prend en entrée le nom de la table et le nom de la variable. Par défaut, pour les variables de type caractère, la longueur est préfixée par un signe dollar '$'. Ce comportement peut être désactivé via le paramètre 'IncludeDollarSign'. La macro est particulièrement utile pour cloner des variables, c'est-à-dire pour créer une nouvelle variable ayant le même type et la même longueur qu'une variable existante. Elle utilise des fonctions %sysfunc pour ouvrir la table, vérifier l'existence de la variable, en extraire la longueur et le type, puis refermer la table. Une gestion d'erreur est incluse pour les cas où la table ou la variable n'est pas trouvée.
Analyse des données

Type : EXTERNE


La macro ne crée pas de données. Elle lit les métadonnées d'une table externe dont le nom est fourni en paramètre ('inds') pour en analyser une variable.

1 Bloc de code
%MACRO
Explication :
Ce bloc définit la macro 'varlen' qui accepte trois paramètres : 'inds' (la table), 'var' (la variable), et 'IncludeDollarSign' (un indicateur pour ajouter le préfixe '$'). Elle utilise la fonction %sysfunc(open) pour obtenir un identifiant de la table. Ensuite, %sysfunc(varnum) et %sysfunc(varlen) sont utilisées pour récupérer le numéro et la longueur de la variable. La fonction %vartype détermine si la variable est de type caractère afin d'ajouter le préfixe '$' si nécessaire. La macro gère les erreurs si la table ne peut être ouverte ou si la variable n'existe pas, et affiche des messages d'erreur dans le log SAS.
Copié !
1%macro varlen(inds,var,IncludeDollarSign=Y);
2 
3 %local dsid varnum varlen rc ;
4 
5 %IF NOT %LENGTH(&IncludeDollarSign.) %THEN %let IncludeDollarSign = Y ;
6 %let IncludeDollarSign = %substr(&IncludeDollarSign.,1,1) ;
7
8 %let dsid = %sysfunc(open(&inds.,is));
9
10 %IF (&dsid. NE 0) %THEN %DO;
11 %let varnum = %sysfunc(varnum(&dsid.,&var.));
12 %IF (&varnum. < 1) %THEN %put %upcase(Error): (VARLEN) Variable &var. not in dataset &inds. ;
13 %ELSE %let varlen = %sysfunc(varlen(&dsid.,&varnum.)) ;
14 %let rc = %sysfunc(close(&dsid.));
15
16 %IF "%vartype(&inds.,&var.)" = "C" and "&IncludeDollarSign." = "Y" %THEN %let varlen=$&varlen;
17 &varlen.
18 %END;
19 %ELSE %DO;
20 %put %upcase(Error): (VARLEN) Dataset &inds. not opened due to the following reason:;
21 %put %sysfunc(sysmsg());
22 %END ;
23 
24%mend ;
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 © 2022, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.