/****************************************************************************** * Programme : From Cloud to Disk: How to Efficiently Convert CAS Tables to SAS Datasets * Reference : CONVERF454 * Source : https://www.wearecas.eu/es/sampleCode/CONVERF454 ******************************************************************************/ /* --- BLOC 1 --- */ libname mycas cas; data mycas.produits_cas; input ID $ NomProduit $ Prix; datalines; A001 Pomme 1.00 B002 Poire 1.20 C003 Orange 0.90 ; run; libname mysas '/tmp'; data mysas.produits_sas; set mycas.produits_cas; run; proc print data=mysas.produits_sas; title 'Produits convertis en SAS Dataset'; run; /* Nettoyage */ proc casutil; droptable casdata='produits_cas' incaslib='CASUSER'; run; /* --- BLOC 2 --- */ libname mycas cas; data mycas.ventes_cas; input IDVente $ Produit $ Quantite PrixUnitaire DateVente :yymmdd10.; format DateVente yymmdd10.; datalines; V001 Pomme 10 1.00 2023-01-05 V002 Poire 5 1.20 2023-01-05 V003 Orange 12 0.90 2023-01-06 V004 Pomme 7 1.00 2023-01-06 V005 Banane 20 0.75 2023-01-07 ; run; libname mysas '/tmp'; data mysas.ventes_filtrees (drop=IDVente); set mycas.ventes_cas; where Quantite > 8; TotalVente = Quantite * PrixUnitaire; run; proc print data=mysas.ventes_filtrees; title 'Ventes filtrées et calculées, converties en SAS Dataset'; run; /* Nettoyage */ proc casutil; droptable casdata='ventes_cas' incaslib='CASUSER'; run; /* --- BLOC 3 --- */ libname mycas cas; /* Création d'une table CAS avec des données */ data mycas.employes_cas; input ID Employe $ Service $ Salaire Anniversaire :yymmdd10.; format Anniversaire yymmdd10.; datalines; 101 Dupont RH 50000 1980-05-15 102 Martin Ventes 65000 1975-11-22 103 Dubois RH 52000 1992-03-01 104 Lefevre Marketing 60000 1988-07-30 ; run; /* Création d'un format personnalisé dans CAS */ proc format library=mycas.formats_lib; value $service_fmt 'RH' = 'Ressources Humaines' 'Ventes' = 'Commercial' 'Marketing' = 'Marketing & Com'; run; libname mysas '/tmp'; %let min_salaire = 55000; data mysas.employes_filtres_cas; set mycas.employes_cas; where Salaire >= &min_salaire; length CategorieAge $15.; if year(Anniversaire) <= 1980 then CategorieAge = 'Senior'; else CategorieAge = 'Junior'; format Service $service_fmt.; run; proc print data=mysas.employes_filtres_cas; title 'Employés filtrés et formatés (SAS Dataset)'; run; /* Nettoyage */ proc casutil; droptable casdata='employes_cas' incaslib='CASUSER'; run; proc format library=mycas.formats_lib; delete $service_fmt; run; /* --- BLOC 4 --- */ libname mycas cas; /* Création d'une table CAS avec des données et des valeurs manquantes */ data mycas.transactions_cas; input IDTrans $ Montant DateTrans :yymmdd10. Statut $; format DateTrans yymmdd10.; datalines; T001 100.50 2023-10-01 Succes T002 . 2023-10-02 Echec T003 250.00 2023-10-03 Succes T004 50.25 2023-10-04 Succes T005 . 2023-10-05 Annule ; run; libname mysas '/tmp'; /* Utilisation de l'option _ERROR_ pour la gestion d'erreurs et de VALIDFMT */ data mysas.transactions_processed; set mycas.transactions_cas; /* Gérer les montants manquants - les remplacer par 0 */ if missing(Montant) then Montant = 0; /* Simuler une erreur de format pour illustrer _ERROR_ (non exécutée dans cet exemple, mais pour démonstration) */ /* if IDTrans = 'T002' then call symputx('invalid_data_found', 'YES'); */ /* Utilisation de l'option VALIDFMT pour vérifier les formats des variables */ /* L'option VALIDFMT est généralement appliquée lors de la lecture, ici on s'assure de la propreté des données */ if Statut not in ('Succes', 'Echec', 'Annule') then call cas.log('Statut invalide détecté pour IDTrans: ' || IDTrans, 'ERROR'); run; proc print data=mysas.transactions_processed; title 'Transactions traitées et converties (SAS Dataset)'; run; /* Nettoyage */ proc casutil; droptable casdata='transactions_cas' incaslib='CASUSER'; run;