Veröffentlicht am :
Makro CREATION_INTERNE

Verwendung der Funktionen %EVAL und %SYSEVALF

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Dieses SAS©-Skript veranschaulicht, wie die Makrofunktionen %EVAL und %SYSEVALF verwendet werden, um arithmetische Operationen mit Makrovariablen durchzuführen. Es beginnt mit einer einfachen Berechnung der Gehaltsunterschiede mit %EVAL, wobei dessen Eignung für ganze Zahlen hervorgehoben wird. Anschließend wird die Einschränkung von %EVAL mit Dezimalzahlen verdeutlicht, indem ein Fließkommawert eingeführt wird, der einen Fehler verursacht. Abschließend wird %SYSEVALF als robuste Lösung zur Handhabung von Berechnungen mit Fließkommazahlen vorgestellt, um Genauigkeit zu gewährleisten und Fehler zu vermeiden.
Datenanalyse

Type : CREATION_INTERNE


Die Daten sind numerische Makrovariablen (%salary1, %salary2), die direkt im Skript definiert sind, ohne externe Datenquelle oder SASHELP-Daten.

1 Codeblock
MACRO Data
Erklärung :
Dieser Block initialisiert zwei Makrovariablen, `salary1` und `salary2`, mit ganzzahligen Werten. Anschließend wird die Makrofunktion `%EVAL` verwendet, um die Differenz zwischen diesen beiden Gehältern zu berechnen und das Ergebnis in einer neuen Makrovariablen `salary_diff` zu speichern. Der Wert von `salary_diff` wird mithilfe von `%PUT` im SAS-Protokoll angezeigt. Dieser Fall funktioniert, da `%EVAL` für Operationen mit ganzen Zahlen geeignet ist.
Kopiert!
1%let salary1=25000;
2%let salary2=27000;
3%let salary_diff = %eval(&salary2 - &salary1);
4%put The salary difference is &salary_diff;
2 Codeblock
MACRO
Erklärung :
In diesem Block wird `salary2` so geändert, dass es einen Dezimalwert enthält. Die Berechnung der Differenz wird erneut mit `%EVAL` versucht. `%EVAL` ist jedoch für Operationen mit ganzen Zahlen konzipiert und kann Fließkommazahlen nicht korrekt verarbeiten. Dies würde zu einem Fehler oder einer Warnung im SAS-Protokoll führen, da `%EVAL` versucht, den Dezimalwert in eine ganze Zahl umzuwandeln, was eine Einschränkung dieser Funktion ist.
Kopiert!
1%let salary1=25000;
2%let salary2=27050.45;
3%let salary_diff = %eval(&salary2 - &salary1);
4%put The salary difference is &salary_diff;
3 Codeblock
MACRO
Erklärung :
Dieser Block behebt das vorherige Problem durch die Verwendung der Makrofunktion `%SYSEVALF`. `%SYSEVALF` wurde speziell entwickelt, um arithmetische Ausdrücke zu evaluieren, die Fließkommazahlen enthalten können. Sie ermöglicht eine präzise Berechnung der Gehaltsdifferenz, selbst wenn die Operanden Dezimalzahlen sind, ohne typbezogene Fehler oder Warnungen im SAS-Protokoll zu erzeugen.
Kopiert!
1%let salary1=25000;
2%let salary2=27050.45;
3%let salary_diff = %sysevalf(&salary2 - &salary1);
4%put The salary difference is &salary_diff;
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.
Urheberrechtsinformationen : Practice 3: Use the %EVAL and %SYSEVALF Functions Lesson 2 - Using Macro Functions SAS Macro Language 1: Essentials