Dieser Artikel untersucht, wie eine klassische bedingte PROC SQL-Logik refaktorisiert werden kann, damit sie in einer CAS-Umgebung mit PROC FedSQL effizient funktioniert.
Nehmen wir dieses Beispiel unter Verwendung der Tabelle sashelp.baseball. Wir möchten die Gesamtzahl der Elemente zählen und eine Summe basierend auf einer komplexen Bedingung berechnen (wobei die absolute Differenz zwischen den Hits und den Runs weniger als 10 % der At-Bats beträgt).
In diesem Code gibt der Ausdruck abs( nhits - nruns ) < 0.1*natbat implizit 1 oder 0 zurück, wodurch die SUM-Funktion direkt arbeiten kann.
Die Lösung: Verwendung von CASE in PROC FedSQL
Wenn wir zu PROC FedSQL wechseln, um diesen Code verteilt auf CAS auszuführen, wird diese implizite Konvertierung von Boolscher Logik in eine Ganzzahl vom strengeren ANSI-Standard nicht auf die gleiche Weise unterstützt. Wenn Sie versuchen, den Code unverändert auszuführen, wird er fehlschlagen oder nicht das erwartete Ergebnis liefern.
Um dieses Verhalten zu emulieren, müssen wir die Logik explizit mit einer CASE-Anweisung machen.
proc fedsql sessref=casauto;
create table BenchMark as
select count(*) as ItemCount
, sum(case
when (abs (nhits - nruns ) < (0.1*natbat)) is true then 1
end
) as DIFF_10
from baseball;
quit;
1
PROC FEDSQL sessref=casauto;
2
create TABLE BenchMark as
3
select count(*) as ItemCount
4
, sum(case
5
when (abs (nhits - nruns ) < (0.1*natbat)) is true THEN1
6
END
7
) as DIFF_10
8
from baseball;
9
QUIT;
Analyse der Änderungen
CASE-Anweisung: Wir haben die Bedingung in eine CASE ... WHEN ... THEN ... END-Struktur gekapselt.
Explizitmachung: Die Klausel WHEN ... IS TRUE THEN 1 zwingt die Engine, den numerischen Wert 1 zurückzugeben, wenn die Bedingung erfüllt ist. Wenn die Bedingung falsch ist, gibt der CASE implizit NULL zurück (oder man könnte ein ELSE 0 hinzufügen), was von der SUM-Funktion ignoriert wird und so das Verhalten des ursprünglichen PROC SQL reproduziert.
CAS-Ausführung: Dank der Option sessref=casauto (oder dem Namen Ihrer CAS-Sitzung) wird dieser Code nun mit der Leistung der verteilten Berechnung ausgeführt.
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
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.