Publié le :
Macro MIXTE

Annotation de graphiques analytiques post-génération

Ce code est également disponible en : Deutsch English
En attente de validation
Ce script utilise une macro %procanno pour modifier un graphique existant stocké dans un document ODS. Il extrait d'abord les données, le modèle de graphique (template) et les variables dynamiques du graphique original. Ensuite, il modifie dynamiquement le template pour y inclure une instruction d'annotation. Finalement, il utilise PROC SGRENDER pour redessiner le graphique avec les données originales, le template modifié, et un jeu de données d'annotation superposé, permettant d'ajouter un filigrane et une date.
Analyse des données

Type : MIXTE


Le script utilise la table SASHELP.CLASS pour la régression initiale. Il crée ensuite un jeu de données d'annotation (anno) en interne, et un jeu de données (dp) en capturant la sortie graphique de PROC REG.

1 Bloc de code
PROC REG Data
Explication :
Exécute une régression linéaire simple sur sashelp.class. La sortie ODS est capturée : le panneau de diagnostic est sauvegardé dans un jeu de données SAS nommé 'dp', et l'objet graphique complet est stocké dans un document ODS nommé 'MyDoc' pour un traitement ultérieur.
Copié !
1ods graphics on;
2ods document name=MyDoc (write);
3PROC REG DATA=sashelp.class;
4 ods select diagnosticspanel;
5 ods OUTPUT diagnosticspanel=dp;
6 model weight = height;
7QUIT;
8ods document close;
2 Bloc de code
DATA STEP Data
Explication :
Crée un jeu de données d'annotation ('anno') qui définit deux éléments textuels à superposer sur un graphique : une date en rouge dans le coin supérieur droit et un filigrane 'Confidential' en diagonale avec une forte transparence.
Copié !
1DATA anno;
2 LENGTH Label $ 40;
3 Function = 'Text'; Label = 'Saturday, July 25, 2015';
4 Width = 100; x1 = 99; y1 = .1;
5 Anchor = 'Right'; TextColor = 'Red';
6 OUTPUT;
7
8 Label = 'Confidential - Do Not Distribute';
9 Width = 150; x1 = 50; y1 = 50; Anchor = 'Center';
10 Transparency = 0.8; TextSize = 40; Rotate = -45;
11 OUTPUT;
12RUN;
3 Bloc de code
MACRO
Explication :
Définit une macro '%procanno'. Elle prend en paramètre un jeu de données, un nom de template, un jeu de données d'annotation et un document ODS. Son rôle est d'extraire les composants d'un graphique existant (données, template, variables dynamiques), de modifier son template pour y insérer une couche d'annotation, puis de le régénérer avec PROC SGRENDER en appliquant les annotations.
Copié !
1%macro procanno(DATA=, template=, anno=anno, document=mydoc);
2 PROC DOCUMENT name=&document;
3 ods exclude properties;
4 ods OUTPUT properties=__p(where=(type='Graph'));
5 list / levels=all;
6 QUIT;
7 
8 DATA _null_;
9 SET __p;
10 call execute("proc document name=&document;");
11 call execute("ods exclude dynamics;");
12 call execute("ods output dynamics=__outdynam;");
13 call execute(catx(' ', "obdynam", path, ';'));
14 RUN;
15 
16 PROC TEMPLATE;
17 SOURCE &template/ file='temp.tmp';
18 QUIT;
19 
20 DATA _null_;
21 INFILE 'temp.tmp';
22 INPUT;
23 IF _n_ = 1 THEN call execute('proc template;');
24 call execute(_infile_);
25 IF _infile_ =: ' BeginGraph' THEN bg + 1;
26 IF bg and index(_infile_, ';') THEN DO;
27 bg = 0;
28 call execute('annotate;');
29 END;
30 RUN;
31 
32 DATA _null_;
33 SET __outdynam(where=(label1 ne '___NOBS___')) END=eof;
34 IF nmiss(nvalue1) and cvalue1 = '.' THEN cvalue1 = ' ';
35 IF _n_ = 1 THEN DO;
36 call execute("proc sgrender data=&data sganno=&anno");
37 call execute("template=&template;");
38 call execute('dynamic');
39 END;
40 IF cvalue1 ne ' ' THEN
41 call execute(catx(' ', label1, '=',
42 ifc(n(nvalue1), cvalue1, quote(trim(cvalue1)))));
43 IF eof THEN call execute('; run;');
44 RUN;
45 
46 PROC TEMPLATE;
47 delete &template;
48 QUIT;
49%mend;
4 Bloc de code
MACRO
Explication :
Appelle la macro '%procanno' pour appliquer le processus d'annotation. Il utilise le jeu de données 'dp' (contenant les données du graphique) et spécifie le template 'Stat.REG.Graphics.DiagnosticsPanel' comme base pour la reconstruction du graphique annoté.
Copié !
1%procanno(
2DATA=dp, template=Stat.REG.Graphics.DiagnosticsPanel)
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.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Cette méthode est la solution ultime lorsque les options standards des procédures analytiques ne permettent pas l'ajout d'éléments spécifiques. Elle transforme SAS en un véritable moteur de mise en page automatisé où chaque pixel du graphique devient programmable. »