Le script définit une macro `%graph_stocks`. D'abord, elle utilise `PROC SQL` pour créer une macro-variable (`STOCK_LIST`) contenant la liste de toutes les valeurs distinctes de la variable `stock`. Ensuite, une boucle `%DO` itère sur cette liste. À chaque itération, elle extrait un nom d'action, ouvre un nouveau fichier PDF, génère un graphique de type 'high-low' avec `PROC SGPLOT` pour les données de cette action, puis ferme le fichier PDF. L'objectif est de produire un graphique par action de manière entièrement automatisée.
Analyse des données
Type : SASHELP
Le script utilise exclusivement la table `stocks` de la bibliothèque standard `SASHELP`.
1 Bloc de code
PROC SQL Data
Explication : Ce bloc SQL prépare la logique de la boucle dynamique. Il sélectionne les valeurs uniques de la colonne 'stock' depuis `sashelp.stocks` et les consolide en une seule macro-variable, `STOCK_LIST`, en utilisant '~' comme séparateur. Le nombre total d'actions est stocké dans `NUM_STOCKS` via la macro-variable automatique `SQLOBS`.
Copié !
proc sql noprint;
select distinct stock into :STOCK_LIST separated by '~'
from sashelp.stocks;
%let NUM_STOCKS = &sqlobs;
quit;
1
PROC SQL noprint;
2
select distinct stock into :STOCK_LIST separated BY'~'
3
from sashelp.stocks;
4
%let NUM_STOCKS = &sqlobs;
5
QUIT;
2 Bloc de code
PROC SGPLOT
Explication : Ce bloc est une boucle de macro qui s'exécute autant de fois qu'il y a d'actions distinctes. Pour chaque action, il ouvre une destination ODS PDF, utilise la fonction `%SCAN` pour extraire le nom de l'action, puis `PROC SGPLOT` génère un graphique 'high-low' en filtrant les données pour cette action. Chaque graphique est enregistré dans un fichier PDF distinct.
Copié !
%do I = 1 %to &NUM_STOCKS;
ods pdf file= "%scan(&STOCK_LIST,&I,~).pdf";
proc sgplot data=sashelp.stocks;
where stock = "%scan(&STOCK_LIST,&I,~)_quoted_string_literal_;
highlow x=date high=high low=low;
run;
ods pdf close;
%end;
1
%DO I = 1 %to &NUM_STOCKS;
2
ods pdf file= "%scan(&STOCK_LIST,&I,~).pdf";
3
PROC SGPLOTDATA=sashelp.stocks;
4
where stock = "%scan(&STOCK_LIST,&I,~)_quoted_string_literal_;
5
highlow x=date high=high low=low;
6
RUN;
7
ods pdf close;
8
%END;
3 Bloc de code
Appel de Macro
Explication : L'ensemble du code est encapsulé dans une macro `%graph_stocks` pour la modularité. L'appel `%graph_stocks;` à la fin du script déclenche l'exécution de tout le processus de génération des rapports.
Copié !
%macro graph_stocks;
* Create the horizontal macro variable list.;
proc sql noprint;
select distinct stock into :STOCK_LIST separated by '~'
from sashelp.stocks;
%let NUM_STOCKS = &sqlobs;
quit;
%do I = 1 %to &NUM_STOCKS;
ods pdf file= "%scan(&STOCK_LIST,&I,~).pdf";
proc sgplot data=sashelp.stocks;
where stock = "%scan(&STOCK_LIST,&I,~)__quoted_string_literal__;
highlow x=date high=high low=low;
run;
ods pdf close;
%end;
%mend graph_stocks;
%graph_stocks;
1
%macro graph_stocks;
2
3
* Create the horizontal macro variable list.;
4
PROC SQL noprint;
5
select distinct stock into :STOCK_LIST separated BY'~'
6
from sashelp.stocks;
7
%let NUM_STOCKS = &sqlobs;
8
QUIT;
9
10
%DO I = 1 %to &NUM_STOCKS;
11
ods pdf file= "%scan(&STOCK_LIST,&I,~).pdf";
12
PROC SGPLOTDATA=sashelp.stocks;
13
where stock = "%scan(&STOCK_LIST,&I,~)__quoted_string_literal__;
14
highlow x=date high=high low=low;
15
RUN;
16
ods pdf close;
17
%END;
18
19
%mend graph_stocks;
20
21
%graph_stocks;
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.
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.