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!
%gask(unit=&unit);
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!
data _null_;
h=&h;
v=&v;
hcell = &hsize / &hpos; %*-- size of horizontal cell;
vcell = &vsize / &vpos; %*-- size of vertical cell;
acell = hcell / vcell; %*-- cell aspect ratio;
verbose = &verbose;
if verbose then put hcell= vcell= acell=;
if h=. or h=&hsize then do;
if v=. or v=&vsize then do;
*-- nothing has changed;
goto done;
end;
else do;
*-- only vsize has changed;
vsize = v;
hsize = &hsize;
end;
end;
else do;
*-- hsize has changed;
if v=. or v=&vsize then do;
*-- only hsize has changed;
hsize = h;
vsize = &vsize;
end;
else do;
*-- both hsize, vsize have changed;
hsize = h;
vsize = v;
end;
end;
* hpos = round(&hpos * (&vsize / vsize));
* vpos = round(&vpos * (&hsize / hsize));
hpos = round(&hpos * (&hsize / hsize));
vpos = round(&vpos * (&vsize / vsize));
call symput('hsize', compress(put(hsize,best6.2)));
call symput('vsize', compress(put(vsize,best6.2)));
call symput('hpos', compress(put(hpos,3.)));
call symput('vpos', compress(put(vpos,3.)));
if verbose then do;
put hsize= vsize= hpos= vpos=;
hcell = hsize / hpos;
vcell = vsize / vpos;
acell = hcell / vcell;
put hcell= vcell= acell=;
end;
done:
run;
1
DATA _null_;
2
h=&h;
3
v=&v;
4
hcell = &hsize / &hpos; %*-- size of horizontal cell;
5
vcell = &vsize / &vpos; %*-- size of vertical cell;
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.
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.