La macro opère sur des variables de macro internes (`&hsize`, `&vsize`, `&hpos`, `&vpos`), qui sont soit initialisées par l'environnement SAS, soit définies par une macro prérequise (%gask). Les données traitées sont des valeurs numériques calculées au sein d'une étape `DATA _NULL_`, sans lecture de jeux de données externes ou de la bibliothèque SASHELP. Les résultats des calculs sont ensuite stockés dans des variables de macro via `call symput`.
1 Bloc de code
Macro Call
Explication : Cet appel à la macro `%gask` (dont la définition n'est pas fournie dans ce script) est utilisé pour récupérer les valeurs courantes des variables de macro `hsize`, `vsize`, `hpos`, et `vpos` dans l'environnement SAS. Ces valeurs sont essentielles pour les calculs subséquents afin d'assurer que le redimensionnement se base sur l'état actuel des options graphiques.
Copié !
%gask(unit=&unit);
1
%gask(unit=&unit);
2 Bloc de code
DATA STEP
Explication : Cette étape `DATA _NULL_` est le cœur de la logique de redimensionnement. Elle calcule la taille des cellules horizontales (`hcell`), verticales (`vcell`) et leur rapport d'aspect (`acell`). La logique conditionnelle détermine comment `hsize` et `vsize` doivent être ajustées en fonction des entrées `h` et `v`. Les valeurs de `hpos` et `vpos` sont ensuite recalculées pour maintenir le rapport d'aspect après le changement de taille. Enfin, `call symput` est utilisé pour mettre à jour les variables de macro globales `hsize`, `vsize`, `hpos` et `vpos` avec les nouvelles valeurs, les rendant disponibles pour les instructions SAS suivantes. Des informations de débogage sont affichées si le paramètre `verbose` est activé.
Copié !
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;
Explication : Cette instruction `goptions` applique les valeurs `hsize`, `vsize`, `hpos`, et `vpos` qui ont été calculées et mises à jour dans l'étape `DATA _NULL_`. Elle définit ainsi les nouvelles dimensions et le positionnement du graphique en utilisant l'unité spécifiée, assurant que le graphique est affiché avec le rapport d'aspect corrigé.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.