Publié le :
Macro CREATION_INTERNE

Macro de Redimensionnement Graphique

Ce code est également disponible en : Deutsch English Español
Cette macro SAS©, `%gscale`, est conçue pour ajuster dynamiquement les dimensions graphiques (`hsize`, `vsize`) et les positions (`hpos`, `vpos`) des graphiques SAS©. Son objectif principal est de préserver le rapport d'aspect des cellules graphiques, assurant ainsi que le texte et les éléments visuels ne soient pas déformés lors du redimensionnement. Elle accepte de nouvelles valeurs pour la hauteur (h) et la largeur (v), ainsi qu'une unité. La macro calcule les nouvelles positions hpos et vpos basées sur les modifications de hsize et vsize, puis applique ces paramètres via l'instruction `goptions`.
Analyse des données

Type : CREATION_INTERNE


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é !
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é !
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 Bloc de code
GOPTIONS
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é.
Copié !
1goptions hsize=&hsize &unit vsize=&vsize &unit hpos=&hpos vpos=&vpos;
2 
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.