El script define una macro `%graph_stocks`. Primero, utiliza `PROC SQL` para crear una macro-variable (`STOCK_LIST`) que contiene la lista de todos los valores distintos de la variable `stock`. Luego, un bucle `%DO` itera sobre esta lista. En cada iteración, extrae un nombre de acción, abre un nuevo archivo PDF, genera un gráfico de tipo 'high-low' con `PROC SGPLOT` para los datos de esa acción, y luego cierra el archivo PDF. El objetivo es producir un gráfico por acción de manera completamente automatizada.
Análisis de datos
Type : SASHELP
El script utiliza exclusivamente la tabla `stocks` de la biblioteca estándar `SASHELP`.
1 Bloque de código
PROC SQL Data
Explicación : Este bloque SQL prepara la lógica del bucle dinámico. Selecciona los valores únicos de la columna 'stock' de `sashelp.stocks` y los consolida en una única macro-variable, `STOCK_LIST`, utilizando '~' como separador. El número total de acciones se almacena en `NUM_STOCKS` a través de la macro-variable automática `SQLOBS`.
¡Copiado!
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 Bloque de código
PROC SGPLOT
Explicación : Este bloque es un bucle de macro que se ejecuta tantas veces como acciones distintas haya. Para cada acción, abre un destino ODS PDF, utiliza la función `%SCAN` para extraer el nombre de la acción, y luego `PROC SGPLOT` genera un gráfico 'high-low' filtrando los datos para esta acción. Cada gráfico se guarda en un archivo PDF distinto.
¡Copiado!
%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 Bloque de código
Appel de Macro
Explicación : Todo el código está encapsulado en una macro `%graph_stocks` para la modularidad. La llamada `%graph_stocks;` al final del script activa la ejecución de todo el proceso de generación de informes.
¡Copiado!
%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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.