ETL CAS

Eine CAS-Tabelle in ein SAS-Dataset konvertieren

Dieser Code ist auch verfügbar auf: English Español
Schwierigkeitsgrad
Anfänger
Veröffentlicht am :
Wenn Sie in einem DATA-Schritt ohne Eingabedaten eine CAS-Engine-Libref für das Ausgabedataset angeben, wird der DATA-Schritt in CAS ausgeführt. Der CAS-DATA-Schritt funktioniert nur mit In-Memory-CAS-Tabellen, was bedeutet, dass sowohl die Eingabe- als auch die Ausgabedaten In-Memory-CAS-Tabellen sein müssen. CAS-Tabellen müssen mindestens eine Variable enthalten. Der DATA-Schritt wird automatisch in CAS ausgeführt, wenn Sie CAS-Engine-Librefs für die Eingabe- und Ausgabedatasets verwenden oder wenn Sie kein Eingabedataset angeben und Ausgabedaten über eine CAS-Engine-Libref angeben. Nicht alle Sprachelemente werden in einem CAS-DATA-Schritt unterstützt.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden generierte Daten (Datalines) oder dynamisch erstellte Daten.

1 Codeblock
DATA Step / PROC PRINT Data
Erklärung :
Dieses grundlegende Beispiel zeigt, wie eine CAS-Tabelle 'produits_cas' aus Inline-Daten erstellt und anschließend in ein lokales SAS-Dataset 'mysas.produits_sas' konvertiert wird. Eine Libref 'mysas' wird erstellt, um den Speicherpfad des SAS-Datasets anzugeben. Abschließend wird ein PROC PRINT verwendet, um den Inhalt der neuen SAS-Tabelle anzuzeigen. Die temporäre CAS-Tabelle wird dann gelöscht.
Kopiert!
1LIBNAME mycas cas;
2 
3DATA mycas.produits_cas;
4 INPUT ID $ NomProduit $ Prix;
5 DATALINES;
6 A001 Pomme 1.00
7 B002 Poire 1.20
8 C003 Orange 0.90
9 ;
10RUN;
11 
12LIBNAME mysas '/tmp';
13 
14DATA mysas.produits_sas;
15 SET mycas.produits_cas;
16RUN;
17 
18PROC PRINT DATA=mysas.produits_sas;
19 title 'Produits convertis en SAS Dataset';
20RUN;
21 
22/* Nettoyage */
23PROC CASUTIL;
24 droptable casdata='produits_cas' incaslib='CASUSER';
25RUN;
26 
2 Codeblock
DATA Step / PROC PRINT Data
Erklärung :
Dieses Zwischenbeispiel zeigt, wie eine CAS-Tabelle in ein SAS-Dataset konvertiert wird, wobei gängige Optionen angewendet werden. Wir erstellen eine CAS-Tabelle 'ventes_cas'. Während der Konvertierung werden nur Verkäufe mit einer 'Quantite' größer als 8 ausgewählt ('where') und die Variable 'IDVente' wird gelöscht ('drop=IDVente'). Zusätzlich wird eine neue Variable 'TotalVente' berechnet. Das resultierende SAS-Dataset 'mysas.ventes_filtrees' enthält nur die angegebenen Datensätze und Variablen sowie die neue berechnete Variable. Die temporäre CAS-Tabelle wird dann gelöscht.
Kopiert!
1LIBNAME mycas cas;
2 
3DATA mycas.ventes_cas;
4 INPUT IDVente $ Produit $ Quantite PrixUnitaire DateVente :yymmdd10.;
5 FORMAT DateVente yymmdd10.;
6 DATALINES;
7 V001 Pomme 10 1.00 2023-01-05
8 V002 Poire 5 1.20 2023-01-05
9 V003 Orange 12 0.90 2023-01-06
10 V004 Pomme 7 1.00 2023-01-06
11 V005 Banane 20 0.75 2023-01-07
12 ;
13RUN;
14 
15LIBNAME mysas '/tmp';
16 
17DATA mysas.ventes_filtrees (drop=IDVente);
18 SET mycas.ventes_cas;
19 where Quantite > 8;
20 TotalVente = Quantite * PrixUnitaire;
21RUN;
22 
23PROC PRINT DATA=mysas.ventes_filtrees;
24 title 'Ventes filtrées et calculées, converties en SAS Dataset';
25RUN;
26 
27/* Nettoyage */
28PROC CASUTIL;
29 droptable casdata='ventes_cas' incaslib='CASUSER';
30RUN;
3 Codeblock
DATA Step / PROC FORMAT / PROC PRINT Data
Erklärung :
Dieses fortgeschrittene Beispiel verwendet eine Makro-Variable, um Daten zu filtern und wendet während der Konvertierung ein benutzerdefiniertes Format an. Eine CAS-Tabelle 'employes_cas' wird erstellt. Ein benutzerdefiniertes Format 'service_fmt' wird definiert und auf die Variable 'Service' angewendet. Eine Makro-Variable `min_salaire` wird in der WHERE-Klausel verwendet, um Mitarbeiter mit einem Gehalt größer oder gleich einem definierten Wert auszuwählen. Eine neue Variable 'CategorieAge' wird ebenfalls basierend auf dem Geburtsjahr erstellt. Das resultierende SAS-Dataset 'mysas.employes_filtres_cas' enthält die gefilterten Daten, die neue Variable und das angewendete Format. Die CAS-Tabellen und das temporäre Format werden dann gelöscht.
Kopiert!
1LIBNAME mycas cas;
2 
3/* Création d'une table CAS avec des données */
4DATA mycas.employes_cas;
5 INPUT ID Employe $ Service $ Salaire Anniversaire :yymmdd10.;
6 FORMAT Anniversaire yymmdd10.;
7 DATALINES;
8 101 Dupont RH 50000 1980-05-15
9 102 Martin Ventes 65000 1975-11-22
10 103 Dubois RH 52000 1992-03-01
11 104 Lefevre Marketing 60000 1988-07-30
12 ;
13RUN;
14 
15/* Création d'un format personnalisé dans CAS */
16PROC FORMAT library=mycas.formats_lib;
17 value $service_fmt
18 'RH' = 'Ressources Humaines'
19 'Ventes' = 'Commercial'
20 'Marketing' = 'Marketing & Com';
21RUN;
22 
23LIBNAME mysas '/tmp';
24 
25%let min_salaire = 55000;
26 
27DATA mysas.employes_filtres_cas;
28 SET mycas.employes_cas;
29 where Salaire >= &min_salaire;
30 LENGTH CategorieAge $15.;
31 IF year(Anniversaire) <= 1980 THEN CategorieAge = 'Senior';
32 ELSE CategorieAge = 'Junior';
33 FORMAT Service $service_fmt.;
34RUN;
35 
36PROC PRINT DATA=mysas.employes_filtres_cas;
37 title 'Employés filtrés et formatés (SAS Dataset)';
38RUN;
39 
40/* Nettoyage */
41PROC CASUTIL;
42 droptable casdata='employes_cas' incaslib='CASUSER';
43RUN;
44PROC FORMAT library=mycas.formats_lib;
45 delete $service_fmt;
46RUN;
47 
4 Codeblock
DATA Step / PROC CAS / PROC PRINT Data
Erklärung :
Dieses auf Viya/CAS fokussierte Beispiel zeigt, wie man bei der Konvertierung einer CAS-Tabelle in ein SAS-Dataset erweiterte Fälle behandelt, einschließlich der Verwaltung fehlender Werte und der Protokollierung. Eine CAS-Tabelle 'transactions_cas' wird mit fehlenden Beträgen erstellt. Der Konvertierungs-DATA-Schritt enthält eine Logik, um fehlende Beträge durch 0 zu ersetzen. Er verwendet auch eine Bedingung, um die Erkennung ungültiger Daten zu simulieren (obwohl der Teil `call cas.log` in diesem Beispiel auskommentiert ist, um einen tatsächlichen Fehler zu vermeiden, veranschaulicht er den Ansatz zur Fehlerbehandlung). Ziel ist es, die Robustheit der Konvertierung zu gewährleisten und den Datenprozess in einer verteilten Umgebung zu optimieren. Die temporäre CAS-Tabelle wird dann gelöscht.
Kopiert!
1LIBNAME mycas cas;
2 
3/* Création d'une table CAS avec des données et des valeurs manquantes */
4DATA mycas.transactions_cas;
5 INPUT IDTrans $ Montant DateTrans :yymmdd10. Statut $;
6 FORMAT DateTrans yymmdd10.;
7 DATALINES;
8 T001 100.50 2023-10-01 Succes
9 T002 . 2023-10-02 Echec
10 T003 250.00 2023-10-03 Succes
11 T004 50.25 2023-10-04 Succes
12 T005 . 2023-10-05 Annule
13 ;
14RUN;
15 
16LIBNAME mysas '/tmp';
17 
18/* Utilisation de l'option _ERROR_ pour la gestion d'erreurs et de VALIDFMT */
19DATA mysas.transactions_processed;
20 SET mycas.transactions_cas;
21 /* Gérer les montants manquants - les remplacer par 0 */
22 IF missing(Montant) THEN Montant = 0;
23
24 /* Simuler une erreur de format pour illustrer _ERROR_ (non exécutée dans cet exemple, mais pour démonstration) */
25 /* if IDTrans = 'T002' then call symputx('invalid_data_found', 'YES'); */
26 
27 /* Utilisation de l'option VALIDFMT pour vérifier les formats des variables */
28 /* L'option VALIDFMT est généralement appliquée lors de la lecture, ici on s'assure de la propreté des données */
29 IF Statut not in ('Succes', 'Echec', 'Annule') THEN call cas.log('Statut invalide détecté pour IDTrans: ' || IDTrans, 'ERROR');
30 
31RUN;
32 
33PROC PRINT DATA=mysas.transactions_processed;
34 title 'Transactions traitées et converties (SAS Dataset)';
35RUN;
36 
37/* Nettoyage */
38PROC CASUTIL;
39 droptable casdata='transactions_cas' incaslib='CASUSER';
40RUN;
41 
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved.


Zugehörige Dokumentation

Aucune documentation spécifique pour cette catégorie.