Publicado el :
Général CREATION_INTERNE

Sans titre

Este código también está disponible en: Deutsch English Français
Esta macro SAS©, `%gscale`, está diseñada para ajustar dinámicamente las dimensiones gráficas (`hsize`, `vsize`) y las posiciones (`hpos`, `vpos`) de los gráficos SAS©. Su objetivo principal es preservar la relación de aspecto de las celdas gráficas, asegurando así que el texto y los elementos visuales no se distorsionen durante el redimensionamiento. Acepta nuevos valores para la altura (h) y la anchura (v), así como una unidad. La macro calcula las nuevas posiciones hpos y vpos basándose en las modificaciones de hsize y vsize, y luego aplica estos parámetros a través de la instrucción `goptions`.
Análisis de datos

Type : CREATION_INTERNE


La macro opera sobre variables de macro internas (`&hsize`, `&vsize`, `&hpos`, `&vpos`), que son inicializadas por el entorno SAS o definidas por una macro prerrequisito (%gask). Los datos procesados son valores numéricos calculados dentro de un paso `DATA _NULL_`, sin lectura de conjuntos de datos externos o de la biblioteca SASHELP. Los resultados de los cálculos se almacenan posteriormente en variables de macro a través de `call symput`.

1 Bloque de código
Macro Call
Explicación :
Esta llamada a la macro `%gask` (cuya definición no se proporciona en este script) se utiliza para recuperar los valores actuales de las variables de macro `hsize`, `vsize`, `hpos` y `vpos` en el entorno SAS. Estos valores son esenciales para los cálculos subsiguientes para asegurar que el redimensionamiento se base en el estado actual de las opciones gráficas.
¡Copiado!
1%gask(unit=&unit);
2 Bloque de código
DATA STEP
Explicación :
Este paso `DATA _NULL_` es el corazón de la lógica de redimensionamiento. Calcula el tamaño de las celdas horizontales (`hcell`), verticales (`vcell`) y su relación de aspecto (`acell`). La lógica condicional determina cómo `hsize` y `vsize` deben ajustarse en función de las entradas `h` y `v`. Los valores de `hpos` y `vpos` se recalculan para mantener la relación de aspecto después del cambio de tamaño. Finalmente, `call symput` se utiliza para actualizar las variables de macro globales `hsize`, `vsize`, `hpos` y `vpos` con los nuevos valores, haciéndolos disponibles para las siguientes instrucciones SAS. Se muestra información de depuración si el parámetro `verbose` está activado.
¡Copiado!
1DATA _null_;
2 h=&h;
3 v=&v;
4 hcell = &hsize / &hpos; %*-- size of horizontal cell;
5 vcell = &vsize / &vpos; %*-- size of vertical cell;
6 acell = hcell / vcell; %*-- cell aspect ratio;
7 verbose = &verbose;
8 IF verbose THEN put hcell= vcell= acell=;
9
10 IF h=. or h=&hsize THEN DO;
11 IF v=. or v=&vsize THEN DO;
12 *-- nothing has changed;
13 goto done;
14 END;
15 ELSE DO;
16 *-- only vsize has changed;
17 vsize = v;
18 hsize = &hsize;
19 END;
20 END;
21 ELSE DO;
22 *-- hsize has changed;
23 IF v=. or v=&vsize THEN DO;
24 *-- only hsize has changed;
25 hsize = h;
26 vsize = &vsize;
27 END;
28 ELSE DO;
29 *-- both hsize, vsize have changed;
30 hsize = h;
31 vsize = v;
32 END;
33 END;
34* hpos = round(&hpos * (&vsize / vsize));
35* vpos = round(&vpos * (&hsize / hsize));
36 hpos = round(&hpos * (&hsize / hsize));
37 vpos = round(&vpos * (&vsize / vsize));
38 
39 call symput('hsize', compress(put(hsize,best6.2)));
40 call symput('vsize', compress(put(vsize,best6.2)));
41 call symput('hpos', compress(put(hpos,3.)));
42 call symput('vpos', compress(put(vpos,3.)));
43 
44 IF verbose THEN DO;
45 put hsize= vsize= hpos= vpos=;
46 hcell = hsize / hpos;
47 vcell = vsize / vpos;
48 acell = hcell / vcell;
49 put hcell= vcell= acell=;
50 END;
51 done:
52RUN;
3 Bloque de código
GOPTIONS
Explicación :
Esta instrucción `goptions` aplica los valores `hsize`, `vsize`, `hpos` y `vpos` que han sido calculados y actualizados en el paso `DATA _NULL_`. Así, define las nuevas dimensiones y el posicionamiento del gráfico utilizando la unidad especificada, asegurando que el gráfico se muestre con la relación de aspecto corregida.
¡Copiado!
1goptions hsize=&hsize &unit vsize=&vsize &unit hpos=&hpos vpos=&vpos;
2 
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.