Type : CREATION_INTERNE
Los ejemplos utilizan datos generados (datalines) o la biblioteca SASHELP.
| 1 | LIBNAME mycas cas; |
| 2 | |
| 3 | /* Crée une table CAS à partir de sashelp.class */ |
| 4 | DATA mycas.class_data; |
| 5 | SET sashelp.class; |
| 6 | RUN; |
| 7 | |
| 8 | /* Exécute une étape DATA multi-threadée sur la table CAS */ |
| 9 | DATA mycas.class_processed; |
| 10 | SET mycas.class_data; |
| 11 | /*_NTHREADS_ est une variable automatique qui affiche le nombre de threads*/ |
| 12 | put 'Nombre de threads actifs : ' _nthreads_; |
| 13 | RUN; |
| 1 | LIBNAME mycas cas; |
| 2 | |
| 3 | /* Création d'une table d'exemple dans CAS */ |
| 4 | DATA mycas.produits; |
| 5 | INPUT ID Produit $ Prix Quantite; |
| 6 | DATALINES; |
| 7 | 1 Pomme 1.5 100 |
| 8 | 2 Poire 2.0 150 |
| 9 | 3 Banane 0.75 200 |
| 10 | 4 Orange 1.2 120 |
| 11 | ; |
| 12 | RUN; |
| 13 | |
| 14 | /* Traitement multi-threadé avec calcul de la valeur totale */ |
| 15 | DATA mycas.produits_valeur(single=no); |
| 16 | SET mycas.produits; |
| 17 | Total_Valeur = Prix * Quantite; |
| 18 | put 'Traitement sur thread ' _nthreads_ ' pour ID ' ID; |
| 19 | RUN; |
| 1 | LIBNAME mycas cas; |
| 2 | |
| 3 | /* Création de deux tables CAS pour la jointure */ |
| 4 | DATA mycas.employes; |
| 5 | INPUT EmpID Nom $ Departement $; |
| 6 | DATALINES; |
| 7 | 101 Alice Ventes |
| 8 | 102 Bob Marketing |
| 9 | 103 Charlie Ventes |
| 10 | 104 David IT |
| 11 | ; |
| 12 | RUN; |
| 13 | |
| 14 | DATA mycas.salaires; |
| 15 | INPUT EmpID Salaire Annuel; |
| 16 | DATALINES; |
| 17 | 101 60000 |
| 18 | 102 75000 |
| 19 | 103 62000 |
| 20 | 104 80000 |
| 21 | ; |
| 22 | RUN; |
| 23 | |
| 24 | /* Jointure des tables en multi-threads */ |
| 25 | DATA mycas.employes_complet (single=no); |
| 26 | MERGE mycas.employes mycas.salaires; |
| 27 | BY EmpID; |
| 28 | IF _nthreads_ > 1 THEN put 'Jointure en cours sur un thread multiple.'; |
| 29 | ELSE put 'Jointure en cours sur un seul thread.'; |
| 30 | RUN; |
| 1 | LIBNAME mycas cas; |
| 2 | |
| 3 | /* Démarrer une session CAS si non déjà active (pour l'autonomie de l'exemple) */ |
| 4 | /* Si une session est déjà active, cette étape sera ignorée ou signalée. */ |
| 5 | options casport=5570 cashost='localhost'; /* Adaptez si votre configuration CAS est différente */ |
| 6 | cas mycas; |
| 7 | |
| 8 | /* Création d'une table temporaire en CAS avec des données plus volumineuses */ |
| 9 | DATA mycas.donnees_large; |
| 10 | DO i = 1 to 100000; |
| 11 | valeur1 = rand('Uniform'); |
| 12 | valeur2 = i * 10; |
| 13 | OUTPUT; |
| 14 | END; |
| 15 | RUN; |
| 16 | |
| 17 | /* Utilisation d'une action CAS pour obtenir des statistiques, puis traitement DATA step multi-threadé */ |
| 18 | PROC CAS; |
| 19 | LOADACTIONSET 'simple'; |
| 20 | SIMPLE.summary RESULT=summary_res / |
| 21 | TABLE={name='donnees_large', caslib='mycas'} |
| 22 | inputs={'valeur1', 'valeur2'}; |
| 23 | PRINT summary_res; |
| 24 | RUN; |
| 25 | |
| 26 | /* Traitement conditionnel et agrégation en multi-threads */ |
| 27 | DATA mycas.resultat_agrege; |
| 28 | SET mycas.donnees_large; |
| 29 | IF valeur1 > 0.5 THEN categorie = 'Haute'; |
| 30 | ELSE categorie = 'Basse'; |
| 31 | put 'Thread ' _nthreads_ ': Traitement de l''observation ' _n_; |
| 32 | RUN; |