Publié le :
Reporting CREATION_INTERNE

Historique Consommation Électrique avec GCHART

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script crée un jeu de données de consommation (kWh) via DATALINES. Il prépare ensuite des étiquettes d'axe personnalisées en concaténant du texte dans une étape DATA et en les stockant dans une macro-variable via PROC SQL. Enfin, il génère un fichier HTML contenant un graphique PROC GCHART avec un logo ajouté via un jeu de données d'annotation (ANNO).
Analyse des données

Type : CREATION_INTERNE


Les données principales sont créées manuellement dans l'étape DATA via l'instruction DATALINES.

1 Bloc de code
INITIALISATION
Explication :
Définition des macro-variables pour le nom du fichier et la date cible, et définition du fileref de sortie.
Copié !
1%let name=example11;
2filename odsout '.';
3 
4%let targetdate=15sep2003;
2 Bloc de code
DATA STEP Data
Explication :
Création du jeu de données 'my_data' contenant les dates et la consommation kwh. Création d'un indicateur 'billmonth' pour la date cible.
Copié !
1DATA my_data;
2FORMAT kwh comma5.0;
3FORMAT date mmyy5.;
4INPUT date date9. kwh;
5IF date eq "&targetdate"d THEN billmonth=1;
6ELSE billmonth=0;
7DATALINES;
815sep2002 800
915oct2002 550
1015nov2002 200
1115dec2002 190
1215jan2003 250
1315feb2003 200
1415mar2003 225
1515apr2003 190
1615may2003 325
1715jun2003 350
1815jul2003 675
1915aug2003 775
2015sep2003 875
21;
22RUN;
3 Bloc de code
PROC SORT
Explication :
Tri des données par date chronologique.
Copié !
1PROC SORT DATA=my_data out=my_data;
2BY date;
3RUN;
4 Bloc de code
DATA STEP Data
Explication :
Construction itérative d'une chaîne de caractères complexe ('axis_text') pour définir des étiquettes d'axe personnalisées (un mois sur deux affiché).
Copié !
1DATA my_data; SET my_data;
2LENGTH axis_text $200;
3retain axis_text;
4IF mod(_n_,2)=1 THEN
5 axis_text=trim(left(axis_text))||' t='||trim(left(_n_))||' '||quote(put(date,monname3.));
6ELSE
7 axis_text=trim(left(axis_text))||' t='||trim(left(_n_))||' '||quote(' ');
8RUN;
5 Bloc de code
PROC SQL
Explication :
Extraction de la chaîne d'étiquettes complète construite précédemment dans une macro-variable :axis_text.
Copié !
1 
2PROC SQL;
3select axis_text into :axis_text from my_data having date=max(date);
4QUIT;
5 
6RUN;
7 
6 Bloc de code
DATA STEP Data
Explication :
Création d'un jeu de données d'annotation SAS/GRAPH pour insérer une image de logo ('power_logo.png') sur le graphique.
Copié !
1DATA logo_anno;
2 LENGTH function $8;
3 xsys='3'; ysys='3'; when='a';
4 function='move'; x=0; y=92; OUTPUT;
5 function='image'; x=x+36.4; y=y+7; imgpath='power_logo.png'; style='fit'; OUTPUT;
6RUN;
7 Bloc de code
PROC GCHART
Explication :
Configuration des options graphiques (GOPTIONS), ouverture de la destination ODS HTML, et génération d'un histogramme vertical (VBAR) avec les données, les annotations de logo et les axes personnalisés.
Copié !
1GOPTIONS DEVICE=png;
2goptions xpixels=480 ypixels=384;
3goptions border;
4
5ODS LISTING CLOSE;
6ODS HTML path=odsout body="&name..htm" (title="Power Bill") style=minimal;
7
8goptions gunit=pct htitle=6 ftitle="albany amt/bold" htext=4.5 ftext="albany amt/bold";
9 
10title1 h=8 " ";
11/* ... titres ... */
12title6 j=c h=6 "kWh Usage History";
13 
14axis1 label=none offset=(5,5) value=( &axis_text );
15axis2 label=none minor=none major=(number=5);
16 
17pattern1 v=x1 c=graybb;
18pattern2 v=x2 c=black;
19 
20PROC GCHART DATA=my_data anno=logo_anno;
21vbar date / discrete type=sum sumvar=kwh
22 subgroup=billmonth nolegend
23 maxis=axis1 raxis=axis2 noframe
24 width=5 space=2.25 coutline=black
25 autoref cref=graydd clipref
26 des="" name="&name";
27RUN;
28 
29QUIT;
30ODS HTML CLOSE;
31ODS LISTING;
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.