Das Skript definiert ein Makro `%graph_stocks`. Zuerst wird `PROC SQL` verwendet, um eine Makrovariable (`STOCK_LIST`) zu erstellen, die eine Liste aller eindeutigen Werte der Variablen `stock` enthält. Anschließend wird diese Liste in einer `%DO`-Schleife durchlaufen. Bei jeder Iteration wird ein Aktienname extrahiert, eine neue PDF-Datei geöffnet, mit `PROC SGPLOT` ein 'High-Low'-Diagramm für die Daten dieser Aktie generiert und anschließend die PDF-Datei geschlossen. Ziel ist es, pro Aktie ein Diagramm vollständig automatisiert zu erstellen.
Datenanalyse
Type : SASHELP
Das Skript verwendet ausschließlich die Tabelle `stocks` aus der Standardbibliothek `SASHELP`.
1 Codeblock
PROC SQL Data
Erklärung : Dieser SQL-Block bereitet die Logik für die dynamische Schleife vor. Er wählt die eindeutigen Werte der Spalte 'stock' aus `sashelp.stocks` aus und konsolidiert sie in einer einzigen Makrovariablen, `STOCK_LIST`, wobei '~' als Trennzeichen verwendet wird. Die Gesamtzahl der Aktien wird in `NUM_STOCKS` über die automatische Makrovariable `SQLOBS` gespeichert.
Kopiert!
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 Codeblock
PROC SGPLOT
Erklärung : Dieser Block ist eine Makroschleife, die so oft ausgeführt wird, wie es eindeutige Aktien gibt. Für jede Aktie wird ein ODS-PDF-Ziel geöffnet, die Funktion `%SCAN` verwendet, um den Namen der Aktie zu extrahieren, und dann generiert `PROC SGPLOT` ein 'High-Low'-Diagramm, wobei die Daten für diese Aktie gefiltert werden. Jedes Diagramm wird in einer separaten PDF-Datei gespeichert.
Kopiert!
%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 Codeblock
Appel de Macro
Erklärung : Der gesamte Code ist für Modularität in einem Makro `%graph_stocks` gekapselt. Der Aufruf `%graph_stocks;` am Ende des Skripts löst die Ausführung des gesamten Berichtsgenerierungsprozesses aus.
Kopiert!
%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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.