%let valeur = 10; /*Associe la macro variable «valeur» au nombre 10*/ %put &valeur; /*Affiche la valeur courante de la macro variable «valeur»*/

Documents pareils
Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Cours d algorithmique pour la classe de 2nde

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

L export de SAS vers Excel expliqué à ma fille

Introduction au logiciel SAS François-Xavier LEJEUNE

INITIATION AU LOGICIEL SAS

Algorithmique et programmation : les bases (VBA) Corrigé

TP 1. Prise en main du langage Python

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Algorithmique et Programmation, IMA

Le langage C. Séance n 4

SAS de base : gestion des données et procédures élémentaires

Introduction au langage C

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

La place de SAS dans l'informatique décisionnelle

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Comment créer et utiliser une fonction

Initiation à la programmation en Python

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme


Les structures. Chapitre 3

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

LES TYPES DE DONNÉES DU LANGAGE PASCAL

STAGE IREM 0- Premiers pas en Python

Allo Support et services électroniques

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Bases de programmation. Cours 5. Structurer les données

Table des matières L INTEGRATION DE SAS AVEC JMP. Les échanges de données entre SAS et JMP, en mode déconnecté. Dans JMP

1. Structure d'un programme FORTRAN 95

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java


Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Présentation du langage et premières fonctions

Examen Médian - 1 heure 30

Représentation d un entier en base b

Découverte de Python

TD3: tableaux avancées, première classe et chaînes

Rappels Entrées -Sorties

TP1. Outils Java Eléments de correction

Guide de formation avec cas pratiques. Programmation. Philippe Moreau Patrick Morié. Daniel-Jean David

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Organigramme / Algorigramme Dossier élève 1 SI

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

Cours 1 : La compilation

Utilisation d objets : String et ArrayList

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Plan du cours. Historique du langage Nouveautés de Java 7

TP, première séquence d exercices.

Calcul Formel et Numérique, Partie I

Formation au logiciel SAS Statistical Analysis System

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

as Architecture des Systèmes d Information

SAS base Introduction à SAS SQL SAS IML

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

L exclusion mutuelle distribuée

Séance 0 : Linux + Octave : le compromis idéal

Introduction à EasyLanguage

1 Imputation par la moyenne

I. Introduction aux fonctions : les fonctions standards

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

TP: Représentation des signaux binaires. 1 Simulation d un message binaire - Codage en ligne

EXCEL TUTORIEL 2012/2013

ODS : organiser et diffuser des sorties

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Cours 7 : Utilisation de modules sous python

Vos outils CNED COPIES EN LIGNE GUIDE DE PRISE EN MAIN DU CORRECTEUR. 8 CODA GA WB 01 13

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Aide - mémoire gnuplot 4.0

Introduction à MATLAB R

Gnuplot. Chapitre Lancer Gnuplot. 3.2 Options des graphes

Importation et exportation de contenu

ACTIVITÉ DE PROGRAMMATION

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

L ALGORITHMIQUE. Algorithme

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Notes de mise à jour Fiery Print Controller AR-PE3, version 1.01 pour AR-C330

Cours Informatique Master STEP

1 Modélisation d être mauvais payeur

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Comment créer des rapports de test professionnels sous LabVIEW? NIDays 2002

Dans l'article précédent, vous avez appris

CREER ET ANIMER SON ESPACE DE TRAVAIL COLLABORATIF

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Initiation à l algorithmique

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

PIC EVAL Dev Board PIC18F97J60

Support de formation Notebook

Programmation C++ (débutant)/instructions for, while et do...while

Notions fondamentales du langage C# Version 1.0

Transcription:

Séance n 4 Programmation en SAS (1) : macro-langage - O.D.S. Le macro-langage, au même titre que le SQL ou l IML (cf. séance n 5), améliore les possibilités du langage de base. Il permet de passer des paramètres entre les étapes DATA et PROC, et de rendre plus rapide et plus simple l écriture des applications avec la répétition à volonté d une séquence d instructions. L O.D.S. (Output Delivery System) est notamment un outil très utile pour envoyer, formater et conserver des sorties SAS dans un fichier externe (Word, par exemple). 1. Les macros Les macro-commandes de SAS permettent d enchaîner l exécution de plusieurs commandes SAS au moyen d une seule instruction (qui sera appelée macro) comportant, éventuellement, un ou plusieurs paramètres. Les macro-variables Les macro-variables sont les paramètres du macro-langage. La déclaration d une macro-variable consiste à associer par la commande %let une chaîne de caractères à un identificateur. Exemple 1 Rôle sert à stocker du texte ; Nom 1 à 8 caractères ; Appel par son nom précédé du symbole & (ex. &mvar) ; Création %LET < macro-variable = valeur > ; Visualiser le contenu %PUT &mvar ; %let valeur = 10; /*Associe la macro variable «valeur» au nombre 10*/ %put &valeur; /*Affiche la valeur courante de la macro variable «valeur»*/ Le symbole «&» signifie «le paramètre qui renvoie à». Dans cet exemple, «&valeur» est donc «le paramètre qui renvoie à valeur». Exemple 2 Considérons la table «tension» de la séance n 3 : DATA tension; INPUT age tension; CARDS; 35 114 45 124 55 143 65 158 75 166; RUN; %let tabin = tension; %let vary = tension; %let varx = age; title "Scatter plot de &vary et &varx"; /* avec " au lieu de ' */

proc gplot data=&tabin; plot &vary*&varx; quit; Lorsque l on met des macro-variables dans une chaîne de caractères, il faut utiliser " au lieu de '. L instruction call symput permet de créer une macro-variable en lui affectant les valeurs d une variable d une table SAS. Cette instruction s utilise exclusivement dans une étape DATA. Syntaxe CALL SYMPUT('nom_macro-variable',valeur_macro_variable); Exemple 3 : data _NULL_; set tension; call symput('nobs',_n_); Rappel : _NULL_ est le mot clé à utiliser en remplacement d'un nom de dataset. Aucun dataset n'est alors physiquement créé. Dans cet exemple, on affecte à la macro-variable nobs, les valeurs successives de la variable _N_ qui correspond au rang de l observation lue (_N_ est une variable protégée de SAS qui contient le nombre de lignes de la table SAS sourante). Au terme de l étape DATA, la macro-variable nobs contient le numéro de la dernière observation, c est-àdire le nombre d observations de la table tension. Le vérifier en affichant la macro variable à l aide de l instruction %put &nobs; Les macro-fonctions Les macro-fonctions sont des fonctions spécifiques au macro-langage pour manipuler des macro-variables. Exemple 4 : %LENGTH et %SCAN %let semaine = lundi - mardi - mercredi - jeudi - 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. Exemple 5 : %EVAL Par définition, une macro-variable sert à stocker du texte. Par exemple, la valeur d une macro-variable à laquelle on affecte «1+2» est «1+2» et non «3». Toutefois, il est possible de forcer le compilateur macro à effectuer l opération avec %eval. La macro-fonction %eval(expression) évalue des calculs (additions, 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 */ %let pi = &k..%eval(100*&i/7-100*&k); /* pi contient 3.14 */

Les programmes macros Parmi les programmes qu on ne souhaite pas écrire plusieurs fois, nous distinguons ceux dont la structure ne change pas mais dont seuls quelques éléments varient. Dans ce cas, on pourra utiliser des macros pour définir l architecture du programme et les paramètres qui permettront de modifier à notre guise les éléments qui doivent changer. Par ailleurs, on souhaiterait parfois que certaines procédures ne soient exécutées qui si certaines conditions sont remplies et autrement on en exécuterait d autres En ce sens, le macro-langage est encore utile pour définir des variables ou exécuter de manière conditionnelle certaines procédures. Ce langage très riche est expliqué dans les manuels de SAS. Une utilisation courante du macro-langage est la macro-expression qui s écrit comme suit %MACRO < nom >; < texte > %MEND; où nom est une chaîne de caractères qui ne dépasse pas huit lettres. Exemple 6 %macro triangle; < Programme traçant un polygone à trois côtés > %mend; Le caractère % est dans SAS le symbole des macros. Dans sa première ligne, une macro doit toujours comporter l instruction %macro suivi du nom et se termine toujours par une ligne comportant l instruction %mend éventuellement suivie du nom de la macro («triangle» est donc facultatif ici). Création d une macro-expression avec paramètres : %MACRO < nom > (< paramètres >); < contenu de la macro > %MEND; Appel de la macro : %NOM(< paramètres >); Remarque À l appel de la macro tous les paramètres sont annoncés entre parenthèses, séparés par des virgules, juste après le nom de la macro-expression. L ordre des paramètres doit être respecté. Exemple 7 %macro printtab (table,varlist); proc print data = &table; var &varlist; %mend printtab; Considérons la table «exemple» de la séance n 1 : data exemple; input nom$ naiss CSP$ auto$ sin98 sin99; cards;

Pierre 65 lib golf 0 10 Paul 48 arti 306 0 0 Jacques 61 cadre 205 51 0 Carole 70 lib AX 27 0 Caroline 65 cadre golf 0 0 Nathalie 62 cadsup 306 0 5 ; %printtab(exemple,nom auto); Bibliothèque de macro-commandes Lorsque certaines macro-commandes sont régulièrement utilisées, il est pratique de pouvoir les conserver les unes à la suite des autres dans un fichier muni de l extension «.sas». En les ajoutant dans un fichier appelé «macros.sas», par exemple, il suffira ensuite dans n importe quel programme SAS de faire l appel : %INCLUDE 'C:\Mes documents\cours de SAS\TPSAS\macro.sas'; /*exemple*/ Remarques Les macro-variables et macro-fonctions peuvent être utilisées globalement tout au long d un programme SAS ou encore localement à l intérieur d une macro. %GLOBAL < nom_macro >; ou %LOCAL < nom_macro >; À l intérieur d une macro, les instructions IF, THEN, ELSE, DO, TO, UNTIL, WHILE, END, etc. sont précédées du symbole «%». Enfin, notons que certaines macro-variables sont déjà définies dans SAS. Par exemple, les instructions suivantes %put &sysdate; %put &sysday; %put &systime; affichent respectivement la date, le jour et l heure dans la fenêtre Log. 2. Contrôle des sorties SAS avec l environnement O.D.S. Par défaut, SAS présente les résultats d un programme sous forme de fichier texte. Le système O.D.S. (Output Delivery System) est un outil permettant de sélectionner des sorties SAS et de les récupérer en choisissant des présentations appropriées à certains logiciels tels que des éditeurs de texte (Word, par exemple) ou des éditeurs de graphiques (Adobe Illustrator, par exemple), etc. Le système O.D.S. offre entre autres les présentations suivantes : LISTING présentation par défaut avec des caractères de type mono-espace (Monaco, Courier) ; PRINTER fichiers de type postscript pour les imprimantes du même type ; HTML fichiers en langage html pour les pages Internet ; RTF fichiers utilisables dans un éditeur de texte (Word, par exemple) ; PDF fichiers en format pdf.

Voici un exemple de programme SAS dans lequel la même sortie est produite en trois formats de fichiers : data note; input nom $ note @@; cards; Pierre 11 Paul 14 Carole 13 Jacques 7 ; ods rtf file = 'note_examen.rtf'; proc print data = note; ods rtf close; ods pdf file = 'note_examen.pdf'; proc print data = note; ods pdf close; ods printer file = 'note_examen.ps'; proc print data = note; ods printer close; Commentaires Dans ce programme, on commande d abord la production d un fichier «.rtf» (Rich Text File) en écrivant ODS RTF; suivi du nom du fichier à créer entre apostrophes. Ce fichier contient la sortie de la procédure PRINT sous la forme d un tableau. On sort ensuite de l environnement O.D.S. avec l instruction ODS RTF CLOSE;. Les sorties en formats «.pdf» (Portable Document Format) ou «.ps» (postscript) s obtiennent de la même manière. Les fichiers pdf peuvent être insérés dans un éditeur de texte mais pas les fichiers postscript. Pour visualiser le fichier postscript nommé «note_examen.ps», il suffit de taper dans une fenêtre Terminal sous Unix (Konsole) l instruction : gv note_examen «gv» pour ghostview. On peut alors imprimer le fichier postcript avec une commande du menu File. On peut aussi convertir un fichier postscript en un fichier pdf en tapant par exemple : ps2pdf note_examen.ps note_examen.pdf Enfin, notons aussi qu il est possible d interrompre l affichage des sorties dans la fenêtre Output via l instruction : ODS LISTING CLOSE; L instruction contraire : ODS LISTING; Permet ensuite de rétablir l affichage. L intérêt de cette instruction est évident lorsqu une même procédure est exécutée un grand nombre de fois dans une boucle, notamment pour ne pas encombrer inutilement la fenêtre Output. Référence bibliographique : [Haworth L. E. (2001) : Output Delivery System, the basics, SAS Institute Inc., Cary, NC]

Exercice n 1 Écrire une macro-commande imprime paramétrée par tabin, varlist et n qui affiche les n premières observations pour une liste de variables choisies d une table SAS donnée. Supprimer l affichage des rangs des observations et ajouter un titre qui renseigne le jour, la date et l heure de l impression. Exercice n 2 Écrire une macro-commande gaussienne à quatre paramètres qui génère une table en sortie tabout qui contient n valeurs simulées suivant une loi normale de moyenne mu et d écart-type sigma. On pourra s inspirer du code écrit pour l exercice 3 du TP2. Exécuter cette macro en faisant varier n, mu, et sigma ; et observer la forme de la distribution associée en utilisant au choix la procédure UNIVARIATE ou SAS/Insight. Ajuster la fonction de densité théorique sur les histogrammes. Remarque À chacune des valeurs entières du seed, choisie entre 1 et 2 31 1 (= 2,147,483,647), correspond un tirage pseudo-aléatoire déterminé et reproductible. Si s 0, SAS utilise l horloge pour initialiser le tirage et celui-ci n est alors plus reproductible à l identique. Exercice n 3 Écrire une macro-commande correlation qui produit la matrice des coefficients de corrélation de Pearson pour certaines variables d une table SAS. Trois paramètres : tabin la table en entrée, tabout la table en sortie qui contient la matrice (utiliser l option : OUTP = < nom_tab >) et varlist pour les variables d étude. Dire comment couper les sorties dans la fenêtre Output. Écrire une macro-commande reglin qui traite de manière automatique le modèle de régression linéaire défini dans le TP3. Cette macro reçoit quatre paramètres : tabin la table en entrée, y_dep la variable dépendante Y, x_exp la (ou les) variable(s) descriptive(s) X et tabout la table en sortie qui contient les valeurs estimées de x 1,, x p, Int et σ. Couper les sorties dans la fenêtre Output. Exécuter ces deux macros sur la table class où height est la variable dépendante et weight la variable descriptive. Exercice n 4 : un exemple de programme en SAS : le Balanced Bootstrap* La méthode du Balanced Bootstrap consiste à réutiliser exactement le même nombre de fois chacune des observations lors du rééchantillonnage. Simple à programmer, cette méthode possède de bonnes propriétés statistiques. Les B échantillons «balanced bootstrap» peuvent être obtenus de la manière suivante : 1. Dupliquer B fois le n-échantillon initial x = (x 1, x 2,, x i,, x n ) pour obtenir un nouvel nb- échantillon ; 2. Permutation aléatoire des nb lignes de cet échantillon ; 3. Découper le nb-échantillon obtenu en B parties égales. On obtient finalement B échantillons bootstrap x * = ( x «rééchantillonnage équilibré» des observations (x i ). * * * * 1, x 2,..., x k,..., x B ) construits à partir d un Proposer une macro bootstrap paramétrée par tabin, la table SAS à rééchantillonner et nboot, le nombre d échantillons souhaité afin de générer nboot échantillons «balanced bootstrap» boot_1,, boot_nboot à partir de tabin. On pensera à l intérieur du programme à stocker le nombre d observations de tabin dans une macro-variable nobs. *[Davison A. C., Hinkley D. V., Schechtman E. (1986) : Efficient bootstrap simulation, Biometrika, 73, 3, p.555-566]