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.
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.
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;
12
RUN;
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é !
%macro procanno(data=, template=, anno=anno, document=mydoc);
proc document name=&document;
ods exclude properties;
ods output properties=__p(where=(type='Graph'));
list / levels=all;
quit;
data _null_;
set __p;
call execute("proc document name=&document;");
call execute("ods exclude dynamics;");
call execute("ods output dynamics=__outdynam;");
call execute(catx(' ', "obdynam", path, ';'));
run;
proc template;
source &template/ file='temp.tmp';
quit;
data _null_;
infile 'temp.tmp';
input;
if _n_ = 1 then call execute('proc template;');
call execute(_infile_);
if _infile_ =: ' BeginGraph' then bg + 1;
if bg and index(_infile_, ';') then do;
bg = 0;
call execute('annotate;');
end;
run;
data _null_;
set __outdynam(where=(label1 ne '___NOBS___')) end=eof;
if nmiss(nvalue1) and cvalue1 = '.' then cvalue1 = ' ';
if _n_ = 1 then do;
call execute("proc sgrender data=&data sganno=&anno");
call execute("template=&template;");
call execute('dynamic');
end;
if cvalue1 ne ' ' then
call execute(catx(' ', label1, '=',
ifc(n(nvalue1), cvalue1, quote(trim(cvalue1)))));
if eof then call execute('; run;');
run;
proc template;
delete &template;
quit;
%mend;
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é.
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.
« 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. »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.