Veröffentlicht am :
Makro CREATION_INTERNE

Graphische Skalierungs-Makro

Dieser Code ist auch verfügbar auf: English Español Français
Dieses SAS©-Makro, `%gscale`, wurde entwickelt, um die grafischen Dimensionen (`hsize`, `vsize`) und Positionen (`hpos`, `vpos`) von SAS©-Grafiken dynamisch anzupassen. Sein Hauptziel ist es, das Seitenverhältnis der grafischen Zellen zu erhalten, um sicherzustellen, dass Text und visuelle Elemente beim Skalieren nicht verzerrt werden. Es akzeptiert neue Werte für Höhe (h) und Breite (v) sowie eine Einheit. Das Makro berechnet die neuen hpos- und vpos-Positionen basierend auf den Änderungen von hsize und vsize und wendet diese Parameter dann über die `goptions`-Anweisung an.
Datenanalyse

Type : CREATION_INTERNE


Das Makro arbeitet mit internen Makrovariablen (`&hsize`, `&vsize`, `&hpos`, `&vpos`), die entweder von der SAS-Umgebung initialisiert oder durch ein erforderliches Makro (%gask) definiert werden. Die verarbeiteten Daten sind numerische Werte, die innerhalb eines `DATA _NULL_`-Schritts berechnet werden, ohne externe Datensätze oder die SASHELP-Bibliothek zu lesen. Die Ergebnisse der Berechnungen werden anschließend über `call symput` in Makrovariablen gespeichert.

1 Codeblock
Macro Call
Erklärung :
Dieser Aufruf des Makros `%gask` (dessen Definition in diesem Skript nicht enthalten ist) wird verwendet, um die aktuellen Werte der Makrovariablen `hsize`, `vsize`, `hpos` und `vpos` in der SAS-Umgebung abzurufen. Diese Werte sind für die nachfolgenden Berechnungen unerlässlich, um sicherzustellen, dass die Skalierung auf dem aktuellen Zustand der grafischen Optionen basiert.
Kopiert!
1%gask(unit=&unit);
2 Codeblock
DATA STEP
Erklärung :
Dieser `DATA _NULL_`-Schritt ist das Herzstück der Skalierungslogik. Er berechnet die Größe der horizontalen Zellen (`hcell`), vertikalen Zellen (`vcell`) und ihr Seitenverhältnis (`acell`). Die Bedingungslogik bestimmt, wie `hsize` und `vsize` basierend auf den Eingaben `h` und `v` angepasst werden müssen. Die Werte von `hpos` und `vpos` werden dann neu berechnet, um das Seitenverhältnis nach der Größenänderung beizubehalten. Schließlich wird `call symput` verwendet, um die globalen Makrovariablen `hsize`, `vsize`, `hpos` und `vpos` mit den neuen Werten zu aktualisieren, wodurch sie für die nachfolgenden SAS-Anweisungen verfügbar gemacht werden. Debug-Informationen werden angezeigt, wenn der Parameter `verbose` aktiviert ist.
Kopiert!
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 Codeblock
GOPTIONS
Erklärung :
Diese `goptions`-Anweisung wendet die Werte `hsize`, `vsize`, `hpos` und `vpos` an, die im `DATA _NULL_`-Schritt berechnet und aktualisiert wurden. Sie definiert somit die neuen Dimensionen und die Positionierung der Grafik unter Verwendung der angegebenen Einheit und stellt sicher, dass die Grafik mit dem korrigierten Seitenverhältnis angezeigt wird.
Kopiert!
1goptions hsize=&hsize &unit vsize=&vsize &unit hpos=&hpos vpos=&vpos;
2 
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.