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!
%let salary1=25000;
%let salary2=27000;
%let salary_diff = %eval(&salary2 - &salary1);
%put The salary difference is &salary_diff;
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!
%let salary1=25000;
%let salary2=27050.45;
%let salary_diff = %eval(&salary2 - &salary1);
%put The salary difference is &salary_diff;
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!
%let salary1=25000;
%let salary2=27050.45;
%let salary_diff = %sysevalf(&salary2 - &salary1);
%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
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.