1 Tutoriel 4: Macro Variables et Macro Commandes en SAS Tutoriel 4: Macro Varia

1 Tutoriel 4: Macro Variables et Macro Commandes en SAS Tutoriel 4: Macro Variables et Macro Commandes en SAS Résumé Cette vignette décrit brièvement les principes et objets du macro langage de SAS permettant d’écrire des macros commandes : ma- cros variables, macros fonctions, passages de paramètres et syntaxe d’une macro commande. Ces éléments concernent le module SAS de base. Plan des tuteuriels : • Prise en main • Gestion des données • Graphiques • Macros-commandes • Bases de données Les procédures du module SAS/STAT sont étudiées dans les cours de statistique afférents. 1 Introduction 1.1 Objectif Le principal objectif de cette vignette est de s’initier à la réalisation de ma- cros commandes SAS. Il s’agit de concevoir puis carrosser un ensemble de traitement spécifiques afin, par exemple, de les rendre accessibles à des utilisa- teurs non spécialistes de SAS mais gros consommateurs comme dans l’indus- trie pharmaceutique ou le marketing. La mise au point d’une macro commande est délicate car les messages concernant des erreurs à l’intérieur d’une macro ne sont pas du tout explicites. Il est donc vivement conseillé, lorsque cela est possible, de suivre la démarche suivante : 1. Écrire et tester le programme qui exécute l’algorithme voulu. 2. Déterminer les variables qui seront les paramètres de la macro, celles qui rendront facilement généralisable à d’autres usages le programme ainsi conçu. 3. Transformer en macros variables les variables ainsi identifiées. Elles se- ront regroupées en tête de programme, initialisées et documentées. 4. Tester les fonctionnalités du programme en variant les valeurs des para- mètres / macros variables. 5. Encapsuler le programme dans une macro commande ( 6. Faire exécuter la macro commande à SAS. 7. Tester l’appel de la macro en respectant scrupuleusement l’ordre des paramètres. Cette démarche élémentaire n’est pas réalisable pour des macros compliqués faisant intervenir des boucles. Il est quand même conseillé de progresser par étape pour éviter des talonnements chronophages à cause de messages d’erreur incompréhensibles. 1.2 Principes Le principe général consiste à associer une chaîne de caractères, une suite de commandes ou, un texte à un identificateur. Par la suite, toute occurrence de cet identificateur ou macro variable est remplacée par le texte désigné au cours d’un traitement préalable à l’exécution proprement dite des commandes. Le pré-processeur implicitement invoqué reconnaît différents objets : va- riables, commentaires, commandes, fonctions, arguments, qui lui sont propres (précédés des caractères & ou %); ils lui confèrent les possibilités d’un langage de programmation rudimentaire mais structuré. Le macro-langage, au même titre, augmente les possibilités du langage de base. Il permet de passer des paramètres entre les étapes DATA et PROC et de systématiser l’enchaînement d’une séquence donnée d’instructions. Les macro-variables et macro-commandes sont connues, sauf déclaration explicite contraire (%global, %local), dans l’environnement dans lequel 2 Tutoriel 4: Macro Variables et Macro Commandes en SAS elles sont déclarées : globalement pour toute une session SAS ou localement à l’intérieur d’une macro. 2 Objets manipulés 2.1 Macro-variables syntaxe La déclaration d’une macro-variable consiste à associer par la commande %let une chaîne de caractères (jusqu’à 65534) à un identificateur (de 1 à 32 caractères) : %let nomvar1=taille; %let nomvar2=poids; %let varlist=csp sexe age taille poids revenu; /* affichage du contenu : */ %put &varlist; Certaines déclarations de macros variables sont implicites : compteur d’une boucle %do, paramètres d’une macro-commande,.... Dans la suite du programme, les références à une macro-variable sont pré- cédées du caractère & : title "Étude des variables &varlist"; proc plot; plot &nomvar1*&nomvar2; run; Le caractère & est traduit au niveau du pré-traitement : remplacer la macro- variable qui suit par la chaîne de caractères avant de passer à l’exécution. Attention aux chaînes de caractères. Si la chaîne est entre "... ", une macro variable contenue dans la chaîne est interprétée, remplacée par sa "valeur". Ce n’est pas le cas si la chaîne est entre ’...’. Une macro-variable peut contenir elle-même des commandes ou instruc- tions SAS mais, dans ce cas, il est préférable de définir une macro-commande. Le système gère des macros variables prédéfinies comme sysdate et sysday qui contiennent respectivement la date et le jour du début de la ses- sion SAS en cours. Exécuter et consulter la fenêtre du journal : %put &sysdate; %put &sysday; %put &_automatic_; La dernière commande liste toutes les macros variables du système. Ces ma- cros variables peuvent être incluses dans un programme pour dater les sorties. call symput L’instruction call symput permet de créer une macro-variables en lui affectant les valeurs d’une variable d’une table SAS. Cette instruction s’utilise exclusivement dans une étape DATA. CALL SYMPUT("nom-macro-var",valeur-macro-var); Cela signifie que le contenu de cette macro variable n’est pas prédéfini par une chaîne de caractères mais peut évoluer en cours d’exécution. Ainsi dans l’exemple : data _NULL_; set table-sas; call symput("nobs",_N_); run; Comme la variable prédéfinie _N_ est incrémenté par le numéro de l’obser- vation courante, à l’issue de l’excécution la macro variable contient comme "valeur" le nombre d’observations de la table-sas. C’est évidemment très pratique quand cette information n’est pas connue a priori sur l’ensemble des tables qui seront traitées. 2.2 Macro fonction Un ensemble de macros fonctions s’appliquant à des macros variables sont prédéfinies. En voici des exemples %let semaine = lundi - mardi - mercredi - jeudi - 3 Tutoriel 4: Macro Variables et Macro Commandes en SAS vendredi - samedi - dimanche; %let longueur = %length(&semaine); %let jour2 = %scan(&semaine,2,’-’); Dans cet exemple, la macro-variable longueur contient la longueur de la chaîne de caractères semaine soit 63. La macro-variable jour2 correspond ensuite au 2ème mot de la chaîne (soit mardi). Le troisième argument indique que le séparateur est un tiret. Par définition, une macro-variable sert à stocker du texte. Par exemple, la valeur d’une macro-variable à laquelle on affecte 1+2 est la chaîne de carac- tères 1+2 et non l’entier 3. Toutefois, il est possible de forcer le compilateur macro à effectuer l’opération avec la macro fonction %eval qui opère des soustractions, multiplications et divisions seulement sur des entiers à partir d’expressions contenant des macro-variables. Si la valeur évaluée contient des décimales, la valeur est tronquée à la partie entière. %let i = 22; %let j = &i/7; /* j contient 22/7 */ %let k = %eval(&i/7); /* k contient 3 */ 2.3 Macro-commandes Syntaxe d’une macro commande La déclaration d’une macro-commande (ou macro tout court) suit les mêmes principes, %macro impdat; %* ceci est un commentaire; proc print; run; %mend impdat; elle peut inclure des paramètres qui deviennent des macro-variables locales : %macro plot(yvar,xvar); proc plot; plot &yvar*&xvar; run; %mend plot; L’exécution d’une macro est invoquée en faisant précéder son nom du ca- ractère % : %impdat; %plot(taille,poids); Valeurs et ordre des paramètres Les paramètres peuvent avoir des valeurs par défaut : %macro plot(yvar=taille,xvar=poids); proc plot; plot &yvar*&xvar; run; %mend plot; Il n’est plus nécessaire de leur assigner des valeurs. Attention à l’ordre des paramètres qui est significatif dans le cas de paramètres sans valeurs par défaut. Sinon, le nom du paramètre est obligatoire au moment de l’appel. Par principe, les premiers paramètres d’une macro commande sont ceux les plus utilisés qui n’ont pas de valeur par défaut. 3 Exemple de déroulement élémentaire L’objectif est d’écrire une macro-commande adaptée à la lecture de tout fichier texte contenant une première colonne d’identificateurs des observations suivie de plusieurs colonnes de variables séparées, par défaut, par des espaces. Le fichier temp.dat est dans le répertoire data de Wikistat. 3.1 Programme Le programme s’écrit de la façon suivante dans un cas particulier. data sasuser.temp; infile "temp.dat" ; 4 Tutoriel 4: Macro Variables et Macro Commandes en SAS input ville $jan fevr mars avri mai juin juil aout sept octo nove dece; run; Tester le programme. 3.2 Macros-variables Introduire les macros variables qui seront les paramètres. %let fich=temp.dat; /* attention au chemin d’accès au fichier */ %let tab=tempville; %let ident=ville; %let listv=jan fevr mars avri mai juin juil aout sept octo nove dece; %let dlm=" "; /* attention à l’espace */ data &tab; infile "&fich" dlm=&dlm; /* attention aux doubles quotes*/ input &ident $ &listev; run; Retester le programme. 3.3 Macros-commandes Transformer le programme en une macro commande. Le paramètre dlm recevant une valeur par défaut. %macro lecacp(in,out,ident,listev,dlm=" "); %* ajouter des commentaires ; %* documentant les paramètres; data sasuser.&out; infile "&in" dlm=&dlm; input &ident $ &listev; run; %mend; Exécuter enfin l’appel de la macro dans SAS afin de créer la table SAS à partir du fichier texte /users/magist/besse/data/TP/temp.dat. %lecacp(temp.dat, temp, ville, janv fevr mars avri mai juin juil aout sept oct nov dec); proc print; run; La macro pourrait être complétée en ajoutant un paramètre de librairie. Par défaut la table SAS est temporaire dans la librairie de travail work. Créer un fichier de nom macros.sas qui contiendra toutes les macros, les unes derrières les autres, couramment utilisée. Ce fichier sera exécuté au début de chaque session. 4 Quelques macros-commandes élémen- taires 4.1 Représentations de courbes Transposition et concaténation Pour représenter les courbes de température, une transformation préalable des données est nécessaire afin de les présenter sous une forme acceptable à uploads/Industriel/ st-tutor4-sas-macros 1 .pdf

  • 38
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager