ETL CAS

Convertir una tabla CAS en un conjunto de datos SAS

Este código también está disponible en: Deutsch English
Nivel de dificultad
Principiante
Publicado el :
Cuando se especifica una libref del motor CAS en el conjunto de datos de salida en un paso DATA sin datos de entrada, el paso DATA se ejecuta en CAS. El paso DATA CAS solo funciona en tablas CAS en memoria, lo que significa que los datos de entrada y salida deben ser tablas CAS en memoria. Las tablas CAS deben contener al menos una variable. El paso DATA se ejecuta automáticamente en CAS cuando se utilizan librefs del motor CAS en los conjuntos de datos de entrada y salida, o cuando no se especifica un conjunto de datos de entrada y se especifican datos de salida usando una libref del motor CAS. No todos los elementos del lenguaje son compatibles en un paso DATA CAS.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) o creados dinámicamente.

1 Bloque de código
DATA Step / PROC PRINT Data
Explicación :
Este ejemplo básico muestra cómo crear una tabla CAS 'produits_cas' a partir de datos en línea, y luego convertirla en un conjunto de datos SAS local 'mysas.produits_sas'. Se crea una libref 'mysas' para especificar la ruta de guardado del conjunto de datos SAS. Finalmente, se usa un PROC PRINT para mostrar el contenido de la nueva tabla SAS. La tabla CAS temporal se elimina posteriormente.
¡Copiado!
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 Bloque de código
DATA Step / PROC PRINT Data
Explicación :
Este ejemplo intermedio muestra cómo convertir una tabla CAS en un conjunto de datos SAS, aplicando opciones comunes. Creamos una tabla CAS 'ventes_cas'. Durante la conversión, solo se seleccionan las ventas con una 'Quantite' mayor que 8 ('where') y se elimina la variable 'IDVente' ('drop=IDVente'). Además, se calcula una nueva variable 'TotalVente'. La tabla SAS resultante 'mysas.ventes_filtrees' contiene solo los registros y las variables especificadas, más la nueva variable calculada. La tabla CAS temporal se elimina posteriormente.
¡Copiado!
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 Bloque de código
DATA Step / PROC FORMAT / PROC PRINT Data
Explicación :
Este ejemplo avanzado utiliza una macro-variable para filtrar los datos y aplica un formato personalizado durante la conversión. Se crea una tabla CAS 'employes_cas'. Se define un formato personalizado 'service_fmt' y se aplica a la variable 'Service'. Se utiliza una macro-variable `min_salaire` en la cláusula WHERE para seleccionar a los empleados con un salario mayor o igual a un valor definido. También se crea una nueva variable 'CategorieAge' basada en el año de nacimiento. La tabla SAS resultante 'mysas.employes_filtres_cas' contiene los datos filtrados, la nueva variable y el formato aplicado. Las tablas CAS y el formato temporal se eliminan posteriormente.
¡Copiado!
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 Bloque de código
DATA Step / PROC CAS / PROC PRINT Data
Explicación :
Este ejemplo centrado en Viya/CAS muestra cómo gestionar casos avanzados durante la conversión de una tabla CAS a un conjunto de datos SAS, incluyendo la gestión de valores faltantes y el registro. Se crea una tabla CAS 'transactions_cas' con montos faltantes. El paso DATA de conversión incluye una lógica para reemplazar los montos faltantes por 0. También utiliza una condición para simular la detección de datos inválidos (aunque la parte `call cas.log` está comentada en este ejemplo para evitar un error real, ilustra el enfoque de gestión de errores). El objetivo es asegurar la robustez de la conversión y optimizar el proceso de datos en un entorno distribuido. La tabla CAS temporal se elimina posteriormente.
¡Copiado!
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 
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved.


Documentación relacionada

Aucune documentation spécifique pour cette catégorie.