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.
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.