Au début, SAS a créé des procédures et des sorties. La sortie était sans forme et vide. Puis SAS a dit : » Que ce soit ODS « , et il y a eu ODS.Les clients ont vu que l’ODS était bon, et SAS a séparé le calcul de l’affichage et de la gestion de la sortie.
Le paragraphe précédent simplifie à l’excès l’Output Delivery System (ODS) de SAS, mais la vérité est que l’ODS est une fonctionnalité puissante de SAS. Vous pouvez utiliser l’ODS pour envoyer des tableaux et des graphiques SAS vers diverses destinations de sortie, notamment HTML, PDF, RTF et PowerPoint. Vous pouvez contrôler le style et les attributs de la sortie, créant ainsi un rapport personnalisé. Des centaines d’articles et de livres ont été écrits sur ODS. Une introduction très basique est Olinger (2000) « ODS for Dummies. »
Pour un programmeur statistique, la destination la plus utile est la destination OUTPUT. La destination OUTPUT envoie un tableau ou un graphique à un ensemble de données SAS. Par conséquent, vous pouvez accéder par programme à chaque élément de la sortie.
Les implications de la déclaration précédente sont monumentales. Je ne saurais trop insister sur l’importance de la destination OUTPUT, alors laissez-moi le répéter :
La destination ODS OUTPUT vous permet de stocker toute valeur produite par n’importe quelle procédure SAS. Vous pouvez ensuite lire cette valeur en utilisant un programme SAS.
La destination ODS OUTPUT répond à une question courante posée par les nouveaux programmeurs sur les forums de discussion SAS : « Comment puis-je obtenir une statistique dans un ensemble de données ou dans une variable macro ? ». Les étapes sont les suivantes :
- Utiliser ODS TRACE ON (ou la documentation SAS) pour trouver le nom de la table ODS qui contient la statistique que vous voulez.
- Utiliser l’instruction ODS OUTPUT pour spécifier le nom de la table et un nom d’ensemble de données. La syntaxe est la suivante : ODS OUTPUT TableName=DataSetName. Exécutez ensuite la procédure pour générer la table.
- Lisez l’ensemble de données pour obtenir la valeur de la statistique.
Nouveau dans la programmation de #SAS ? Comment obtenir n’importe quelle statistique dans un ensemble de données. Click To Tweet
Trouver le nom de la table ODS
À titre d’exemple, supposons que vous ayez l’intention d’utiliser PROC REG pour effectuer une régression linéaire, et que vous souhaitiez capturer la valeur R-carré dans un ensemble de données SAS. La documentation de la procédure énumère toutes les tables ODS que la procédure peut créer, ou vous pouvez utiliser l’instruction ODS TRACE ON pour afficher les noms des tables produites par PROC REG. Les données sont les 428 véhicules de l’ensemble de données Sashelp.Cars, qui est distribué avec SAS:
ods trace on ; /* write ODS table names to log */proc reg data=Sashelp.Cars plots=none ; model Horsepower = EngineSize Weight;quit;ods trace off ; /* arrêter d'écrire dans le journal */
Sortie ajoutée:-------------Name : FitStatisticsLabel : Fit StatisticsTemplate : Stat.REG.FitStatisticsPath : Reg.MODEL1.Fit.Horsepower.FitStatistics-------------
En regardant la sortie, vous pouvez voir que le troisième tableau contient la valeur R-carré. En regardant le journal SAS, vous pouvez voir que le nom de la troisième table est « FitStatistics. »
Enregistrer le tableau dans un ensemble de données SAS
Maintenant que vous savez que le nom du tableau ODS est » FitStatistics « , utilisez la destination ODS OUTPUT pour écrire ce tableau dans un ensemble de données SAS, comme suit :
ods output FitStatistics=Output ; /* le nom de l'ensemble de données est 'Output' */proc reg data=Sashelp.Cars plots=none ; /* même appel de procédure */ modèle Horsepower = EngineSize Weight;quit ; proc print data=Output noobs;run;
La sortie du PROC PRINT montre la structure de l’ensemble de données de sortie. Remarquez que l’ensemble de données a souvent un aspect différent du tableau original affiché. Le jeu de données contient des colonnes non imprimantes (comme Modèle et Dépendant) qui n’apparaissent pas dans le tableau affiché. L’ensemble de données contient également des colonnes qui contiennent les valeurs numériques brutes et les valeurs de caractères (formatées) des statistiques. Les colonnes cValue1 et nValue1 représentent les mêmes informations, sauf que la cValue1 est une colonne de caractères alors que nValue1 est une colonne numérique. Il en va de même pour les colonnes cValue2 et nValue2. Les valeurs de caractères peuvent contenir des valeurs formatées ou arrondies.
Lire la valeur de la statistique dans une variable macro
D’après la sortie précédente de PROC PRINT, vous pouvez voir que la valeur numérique de la statistique du carré R se trouve dans la première ligne et dans la colonne nValue2. Vous pouvez donc lire et traiter cette valeur en utilisant une clause WHERE standard. Par exemple, les instructions suivantes utilisent le sous-routine SYMPUTX pour créer une variable macro qui contient la valeur de la statistique R-carré :
data _null_;set Output;if Label2="R-Square" then call symputx("RSq", nValue2);run ; %put RSq = &RSq;
RSq = 0.6201360929
Le journal SAS montre que la valeur du carré R est maintenant contenue dans la variable macro Rsq.
Stocker la statistique dans une variable macro n’est qu’une façon d’utiliser l’ensemble de données. Vous pourriez également lire les statistiques dans PROC IML ou PROC SQL pour un calcul supplémentaire, ou afficher la valeur de la statistique dans un graphique.
Traitement par groupe : Échantillons multiples et statistiques multiples
Les sections précédentes montrent comment enregistrer un seul tableau dans un ensemble de données SAS. Il est tout aussi facile de créer un ensemble de données qui contient plusieurs statistiques, une pour chaque niveau d’une analyse BY-group.
Supposons que vous souhaitiez effectuer plusieurs régressions, une pour chaque valeur de la variable Origine, qui a les valeurs « Asie », « Europe » et « USA ». L’appel suivant à PROC SORT trie les données par la variable Origine.Les données triées sont stockées dans l’ensemble de données CARS.
proc sort data=Sashelp.Cars out=Cars ; by Origin;run;
Vous pouvez ensuite spécifier l’origine sur l’instruction BY dans PROC REG pour effectuer trois analyses de régression. Lorsque vous exécutez une analyse BY-groupe, vous ne souhaitez peut-être pas voir tous les résultats affichés sur l’écran de l’ordinateur, surtout si votre objectif est d’enregistrer les résultats dans un ensemble de données de sortie. Vous pouvez utiliser l’instruction ODS EXCLUDE pour supprimer la sortie SAS.
ods exclude all ; /* supprimer les tableaux à l'écran */ods output FitStatistics=Output2 ; /* 'Output2' contient les résultats pour chaque groupe BY */proc reg data=Cars plots=none ; by Origin ; model Horsepower = EngineSize Weight;quit ;ods exclude none ; /* ne supprime plus les tableaux */ proc print data=Output2 noobs ; where Label2="R-Square" ; var Origin Label2 nValue2;run;
La sortie de PROC PRINT montre les statistiques R-square pour chaque modèle. Remarquez que les variables BY-group (dans ce cas, Origin) sont ajoutées aux ensembles de données de sortie lorsque vous exécutez une analyse BY-group. Vous pouvez maintenant utiliser les statistiques dans des programmes ou des graphiques.
Alternatives à l’utilisation de ODS OUTPUT
Certaines procédures fournissent une option alternative pour créer un ensemble de données de sortie qui contient des statistiques. Vérifiez toujours la documentation SAS pour savoir si la procédure fournit une option qui écrit les statistiques courantes dans un ensemble de données de sortie. Par exemple, la documentation de l’instruction PROC REG indique que vous pouvez utiliser l’option OUTEST= avec l’option RSQUARE pour obtenir un ensemble de données de sortie contenant les estimations des paramètres et d’autres statistiques de modèle telles que la valeur R-carré. Au lieu de cela, vous pouvez obtenir la statistique comme suit:
proc reg data=Cars NOPRINT outest=Output3 RSQUARE ; /* statistiques dans 'Output3' */ by Origin ; modèle Horsepower = EngineSize Weight;quit ; proc print data=Output3 noobs ; format _RSQ_ 8.6 ; var Origin _RSQ_;run;
Summary
En résumé, l’instruction ODS OUTPUT vous permet de créer un ensemble de données qui contient toute statistique produite par une procédure SAS. Vous pouvez utiliser l’instruction ODS OUTPUT pour capturer une statistique et l’utiliser plus tard dans votre programme.