Cet article explore comment refactoriser une logique conditionnelle PROC SQL classique pour qu'elle fonctionne efficacement dans un environnement CAS avec PROC FedSQL.
Prenons cet exemple utilisant la table sashelp.baseball. Nous voulons compter le nombre total d'éléments et calculer une somme basée sur une condition complexe (où la différence absolue entre les coups sûrs et les points est inférieure à 10% des présences au bâton).
Dans ce code, l'expression abs( nhits - nruns ) < 0.1*natbat retourne implicitement 1 ou 0, ce qui permet à la fonction SUM de fonctionner directement.
La Solution : Utiliser CASE dans PROC FedSQL
Lorsque nous passons à PROC FedSQL pour exécuter ce code de manière distribuée sur CAS, cette conversion implicite de booléen en entier n'est pas supportée de la même façon par la norme ANSI plus stricte. Si vous tentez d'exécuter le code tel quel, il échouera ou ne produira pas le résultat escompté.
Pour émuler ce comportement, nous devons rendre la logique explicite en utilisant une instruction CASE.
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 des changements
Instruction CASE : Nous avons encapsulé la condition dans une structure CASE ... WHEN ... THEN ... END.
Explicitation : La clause WHEN ... IS TRUE THEN 1 force le moteur à renvoyer la valeur numérique 1 lorsque la condition est remplie. Si la condition est fausse, le CASE renvoie implicitement NULL (ou on pourrait ajouter un ELSE 0), ce qui est ignoré par la fonction SUM, reproduisant ainsi le comportement du PROC SQL original.
Exécution CAS : Grâce à l'option sessref=casauto (ou le nom de votre session CAS), ce code s'exécute désormais avec la puissance du calcul distribué.
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.