/****************************************************************************** * Programme : Feature Engineering Multi-Thread : Parallélisez la préparation de vos données sans réapprendre à coder * Reference : EXECUT26C9 * Source : https://www.wearecas.eu/en/sampleCode/EXECUT26C9 ******************************************************************************/ /* --- BLOC 1 --- */ libname mycas cas; /* Crée un libref CAS */ proc casutil outcaslib="casuser" replace; load data=sashelp.cars casout="cars_cas"; run; data mycas.cars_with_eff; set mycas.cars_cas; if MPG_City > 25 then Efficiency_Category = 'Haute'; else Efficiency_Category = 'Standard'; run; proc print data=mycas.cars_with_eff(obs=5); title 'Exemple Basique: Voitures avec catégorie d''efficacité'; run; proc casutil outcaslib="casuser" drop table="cars_with_eff"; run; /* --- BLOC 2 --- */ libname mycas cas; proc casutil outcaslib="casuser" replace; load data=sashelp.cars casout="cars_cas"; run; data mycas.sporty_cars(keep=Make Model Type Origin MSRP); set mycas.cars_cas; where Type = 'Sports' and MPG_Highway > 20; run; proc print data=mycas.sporty_cars(obs=5); title 'Exemple Intermédiaire: Voitures de sport économes en carburant'; run; proc casutil outcaslib="casuser" drop table="sporty_cars"; run; /* --- BLOC 3 --- */ libname mycas cas; proc casutil outcaslib="casuser" replace; load data=sashelp.cars casout="cars_cas"; run; data mycas.cars_processed; set mycas.cars_cas; Row_ID = _N_; Thread_Info = cats('Thread: ', _THREADID_, ' on node: ', _HOSTNAME_); if (_N_ between 1 and 10) or (mod(_N_, 100) = 0) then call symputx(cats('Obs',_N_), Make); run; %macro check_macros; %global Obs1 Obs10 Obs100; %if %symexist(Obs1) %then %put Observation 1 (Make): &Obs1.; %if %symexist(Obs10) %then %put Observation 10 (Make): &Obs10.; %if %symexist(Obs100) %then %put Observation 100 (Make): &Obs100.; %mend; %check_macros; proc print data=mycas.cars_processed(obs=10); title 'Exemple Avancé: Traitement et informations de thread'; run; proc casutil outcaslib="casuser" drop table="cars_processed"; run; /* --- BLOC 4 --- */ libname mycas cas; /* Création d'une table d'entrée avec quelques données manquantes */ data cars_data_local; input Make $ Model $ Type $ MPG_City MPG_Highway; datalines; Toyota Camry Sedan 28 39 Honda Civic Sedan 30 40 Ford F-150 Truck . 22 Chevrolet Silverado Truck 16 . BMW X5 SUV 20 27 ;; run; proc casutil outcaslib="casuser" replace; load data=cars_data_local casout="cars_with_missing"; run; data mycas.cars_clean mycas.cars_problematic; set mycas.cars_with_missing; /* Vérifier les valeurs manquantes pour la consommation de carburant */ if missing(MPG_City) or missing(MPG_Highway) then do; output mycas.cars_problematic; /* Écrire les lignes avec problèmes dans une table séparée */ _ERROR_ = 1; /* Marquer l'observation comme ayant une erreur pour le log */ end; else do; Avg_MPG = (MPG_City + MPG_Highway) / 2; output mycas.cars_clean; end; run; proc print data=mycas.cars_clean(obs=5); title 'Exemple Viya: Voitures sans données manquantes'; run; proc print data=mycas.cars_problematic(obs=5); title 'Exemple Viya: Voitures avec données manquantes'; run; proc casutil outcaslib="casuser" drop table="cars_with_missing" casout="cars_clean" casout="cars_problematic"; run;