Les macros SAS

download Les macros SAS

of 44

  • date post

    02-Jan-2017
  • Category

    Documents

  • view

    232
  • download

    2

Embed Size (px)

Transcript of Les macros SAS

  • 1

    Les macros SAS

    Introduction

    Cette partie trs importante : il vous faudra utiliser le macrolangage pour raliser votre projetde programmation.

    Le macrolangage amliore les possibilits du langage de base. Il permet :

    - de passer des paramtres entre les tapes DATA et PROC,- daugmenter la rapidit des critures en permettant la rptition volont dune tape,- dautomatiser des programmes, sous forme de modules paramtrs. Ces outils sont

    facilement utilisables par des personnes ne connaissant pas SAS. Il leur suffit de saisirles paramtres du module.

    Exemple 1/* Cas 1 */PROC MEANS DATA=base.clients MEAN ; VAR nbenf ;RUN ;

    /* Cas 2 */

    PROC MEANS DATA=base.intranet MEAN SUM ; VAR DUREE NBPAGES ;RUN ;

    Entre les deux procdures MEANS prsentes dans le prcdent encadr, on peut trouver deslments de syntaxe communes et dautres qui peuvent varier; ces derniers peuvent tre mssous forme de paramtres, par exemple TABLE, STATS et LISTEVAR.

    Pour retrouver les deux cas de lexemple prcdent, il suffit alors de donnes des valeursadquates aux trois paramtres : ainsi, TABLE vaut base.clients, STATS vaut MEAN etLISTEVAR vaut nbenf dans le premier cas.

    Le fonctionnement du macro-langage

    Avec le macro-langage, le paramtrage dun programme SAS consiste :

    - crire le code SAS du traitement raliser pour lune des tables ;

    - identifier les lments dont les valeurs pourront varier, il sagit en fait des paramtresdu programme ;

    - crer les paramtres en dbut de programme en attribuant chacun deux un nom etventuellement une valeur par dfaut. Ces valeurs pourront tre modifiesultrieurement autant de fois que ncessaire ;

    - retravailler le code SAS du traitement raliser prcdemment crit en remplaantpartout o cela savre ncessaire les valeurs des paramtres par des rfrences cesderniers laide des noms des paramtres.

  • 2

    Le macrolangage est compos de :

    - macro-variables- macro-instructions- macro-fonctions- macros

    Les macro-variables sont les paramtres du macrolangage. Pour utiliser ces paramtres dansun programme SAS, on fait prcder le nom de la macro-variable par le caractre &.

    Exemple 2proc print data=&table;run;On peut ensuite imprimer diffrentes tables en changeant la dfinition de &table. Si on dfinit&table=individus, les prcdentes instructions permettent dimprimer la table SAS individus.

    Il y a deux types de macro-variables :- les macro-variables cres par la programmation- les macro-variables crs automatiquement par SAS.

    Les macro-instructions sont des instructions spcifiques au macrolangage. Elles permettentde manipuler les macro-variables laide dexpressions et de macro-fonctions. Les mots clsde ces instructions sont en gnral prcds du caractre %.

    Exemple 3 : macro-instruction %let%let table = donnees.individu ;Le processeur macro affecte la macro-variable table la valeur donnees.individu.Linstruction prcdente suivie des deux instructions de lexemple 1 permet limpression de latable individu (table permanente, stocke dans la librairie donnees).

    Les macro-fonctions sont des fonctions spcifiques au macrolangage servant manipuler lesmacrovariables. Les noms des macro-fonctions commencent toujours par le caractre %.

    Exemple 4 : macro-fonction %scan%let semaine = lundi - mardi - mercredi - jeudi - vendredi - samedi - dimanche ;%let jour2 = %scan(&semaine,2,-) ;Dans cet exemple, la macro-variable jour2 correspond au 2me mot de la chane de caractresemaine (mardi).

    Les macros sont une suite de macro-instructions. Elles permettent de manipuler et de gnrerdu texte. On peut par exemple gnrer de cette faon un programme SAS paramtr avec desinstructions ou des tapes rptes.

    Le bloc dinstructions dfinissant la macro est encadr des instructions %macro et %mend.

    Pour utiliser la macro, on fait prcder le nom de la macro du caractre %.

  • 3

    Exemple 5 :%macro imprim (table) ;

    proc print data = &table ;run ;

    %mend ;%imprim(donnees.individu) ;La macro imprim permet dimprimer une table SAS. Dans le prcdent exemple, elleimprimera la table donnees.individu.

    Certaines macro-instructions peuvent tre utilises en dehors dun bloc macro, en code ouvert(open code). Cest le cas de linstruction %let.

  • 4

    I. Les macro-variables

    Les macro-variables servent stocker du texte, et le passer en paramtre dune tape lautre. Elles nont pas de type (numrique ou caractre) comme les variables SAS.

    Chaque macro-variable a une valeur unique un instant donn. Cette valeur peut tremodifie par le programme (macro-instructions, macro-fonctions).

    Une macro-variable nest pas une variable SAS appartenant une table SAS.

    Principales diffrences entre macro-variables et variables SAS

    Macro-variable Variable SAS

    Une macro-variable nest pas rattache unetable SAS.

    Une variable SAS est rattache une tableSAS : cest une de ses colonnes.

    Une macro-variable ne contient quune seulevaleur.

    Une variable SAS a une valeur parobservation de la table SAS laquelle elle estrattache.

    La valeur dune macro-variable estsystmatiquement du texte.

    Une variable SAS est de type numrique oucaractre.

    Nom des macro-variables

    Le nom dune macro-variable doit :- comporter de 1 8 caractres : lettres, chiffres et _ (blanc soulign) ;- commencer par un lettre ou _.

    La casse na pas dimportance pour le nom dune macro-variable. Il est par exemplestrictement quivalent dcrire nomMV, Nommv, NOMMV, etc.

    La longueur maximale autorise pour le nom dune macro-variable est de 32 caractres depuisla version 8 de SAS.

    Appel dune macro-variable

    Lappel dune macro-variable se fait par son nom prcd du signe &. &table.

    Contenu dune macro-variable

    Le contenu ou valeur dune macro-variable est une chane de caractres, mme sil sagit dunnombre, dune opration, dune date ou dun morceau de code. La casse dune macro-vraiableest importante car il sagit dun texte. Ainsi, il nest pas quivalent dcrire table, TABLE ouTable : il sagit de valeurs diffrentes. Tous les caractres alphanumriques sont autorisspour crire la valeur dune macro-variable :

    - des lettres- des chiffres- des blancs- des caractres spciaux- des dlimiteurs.

  • 5

    Toutefois, certains caractres ou mots spcifiques du langage SAS dans la valeur dune macrorequirent un traitement particulier laide de macro-fonctions de quoting. Cest le cas, enparticulier, de lapostrophe, mais aussi, selon le contexte, du signe gal, de la virgule et dupoint-virgule.

    La longueur maximale dune macro-variable est de 65 534 caractres en version 9 de SAS,32 767 caractres en version 8.

    Exemple 6%let semaine = lundi - mardi - mercredi - jeudi - vendredi - samedi - dimanche ;Le nom de la macro-variable est semaine.La valeur de la macro-variable est lundi - mardi - mercredi - jeudi - vendredi - samedi -dimanche.

    Un macro-variable ne contient quune valeur. La valeur dune macro-variable est initialise etmodifiable par les macro-instructions appropries.

    Cration de macro-variables

    Une macro-variable peut tre cre de plusieurs manires. Une premire mthode, avec unemacro-instruction %LET, peut sutiliser nimporte o dans un programme SAS. Unedeuxime, avec la fonction CALL SYMPUT, sutilise dans une tape Data pour crer desmacro-variables partir dune ou de plusieurs variables SAS.

    Linstruction %let

    La macro-instruction %let cre une macro-variable et lui affecte une valeur.

    Une macro-intsruction %let peut sutiliser nimporte o dans le code dun programme SAS.

    Syntaxe :%let nom-de-la-macro-variable = valeur ;

    Le champ valeur peut-tre : vide une chane de caractres une expression avec des macro-variables une expression avec des macro-fonctions lappel dune macro

    Exemple 7%let semaine = lundi mardi mercredi jeudi vendredi samedi dimanche ;%let list_var = &age &salaire ;%let total1 = 31 + 28 ;%let total2 = %eval(&i+1) ;Nous reviendrons ultrieurement sur la macro-fonction %eval.Les blancs gauche et droite de la chane de caractres sont automatiquement limins.

    Tous les types de valeurs peuvent tre cits sans guillemets, puisque systmatiquement lavaleur dune macro-variable est considre comme du texte. Quand des guillemets sontprsents, comme par exemple :

  • 6

    %let LIBELLE= Dure de connexion ;

    ils font partie intgrante de la valeur et seront recopis lors de son utilisation.

    La valeur de total1 reste le texte 31+28, et non pas le rsultat de lopration puisquil sagit lencore dun texte.

    Macro-variable indice

    On peut gnrer une macro-variable indice notamment avec linstruction %do%to. Cetteinstruction est utilisable uniquement lintrieur dune macro.

    Exemple 8%macro boucle ;

    %do i = 1 %to 10 ;proc print data = tab&i ;run ;

    %end ;%mend ;Linstruction %do cre la macro-variable i et lui affecte successivement les valeurs 1 10.La macro boucle imprime les tables tab1 tab10.Sans macro-langage, il faut rpter 10 fois la proc print.

    Les instructions %global et %local

    Ces instructions initialisent des macro-variables contenant une chane de caractre vide.

    Syntaxe :

    %global nom ;%local prenom ;

    Lutilisation des macro-instructions %global et %local sera aborde plus en dtail lorsquenous aborderons lenvironnement de rfrence.

    Linstruction CALL SYMPUT

    Linstruction call symput permet de crer une ou plusieurs macro-variables en leur affectantles valeurs dune variable dune table SAS. Cette instruction sutilise obligatoirement dansune tape data.

    Syntaxe :

    CALL SYMPUT (nom_macro-variable, valeur_macro_variable) ;

    Le premier argument de linstruction CALL SYMPUT dfinit le nom des macro-vraiablescres au cours de ltape Data. Cette expression peur contenir :

    - le nom de la m