Publicado el :
Macro SASHELP

Generación dinámica de gráficos por acción

Este código también está disponible en: Deutsch English Français
En espera de validación
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!
1PROC SQL noprint;
2 select distinct stock into :STOCK_LIST separated BY '~'
3 from sashelp.stocks;
4 %let NUM_STOCKS = &sqlobs;
5QUIT;
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!
1%DO I = 1 %to &NUM_STOCKS;
2 ods pdf file= "%scan(&STOCK_LIST,&I,~).pdf";
3 PROC SGPLOT DATA=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!
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 SGPLOT DATA=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.