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!
%gask(unit=&unit);
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!
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;
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.
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.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.