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é.
Los códigos y ejemplos proporcionados en WeAreCAS.eu son con fines educativos. Es imperativo no copiarlos y pegarlos ciegamente en sus entornos de producción. El mejor enfoque es comprender la lógica antes de aplicarla. Recomendamos encarecidamente probar estos scripts en un entorno de prueba (Sandbox/Dev). WeAreCAS no acepta ninguna responsabilidad por cualquier impacto o pérdida de datos en sus sistemas.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.