Publicado el :
ETL SASHELP_CARS

Ejecutar un paso DATA en CAS sobre una tabla CAS

Este código también está disponible en: Deutsch English Français
En espera de validación
La ejecución de un paso DATA en CAS implica que el código SAS© es procesado directamente por el servidor CAS, lo que permite aprovechar el procesamiento distribuido en memoria para un mayor rendimiento en grandes volúmenes de datos. Para que un paso DATA se ejecute en CAS, los datos de entrada y salida deben ser tablas CAS, accesibles a través de un libref de motor CAS (por ejemplo, 'mycas'). Es crucial que la tabla de salida contenga al menos una variable, ya que las tablas de cero columnas no son compatibles con CAS. Se recomienda el procedimiento CASUTIL para cargar conjuntos de datos SAS© existentes en tablas CAS. El sistema detecta automáticamente que un paso DATA debe ejecutarse en CAS siempre que se utilice un libref CAS para los datos de entrada y/o salida. Se aplican algunas limitaciones a los elementos del lenguaje soportados en un paso DATA ejecutado en CAS.
Análisis de datos

Type : SASHELP_CARS


Los ejemplos utilizan el conjunto de datos SASHELP.CARS, que se carga en la memoria CAS utilizando PROC CASUTIL para garantizar la autonomía de los ejemplos.

1 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo ilustra el uso más simple de un paso DATA en CAS. Carga el conjunto de datos SASHELP.CARS en la memoria CAS, luego crea una nueva tabla CAS llamada 'cars_with_eff'. Se agrega una nueva variable 'Efficiency_Category' en función del consumo de combustible en ciudad (MPG_City). El uso de los librefs 'mycas' para la entrada y salida garantiza la ejecución del paso DATA en CAS. Se utiliza un PROC PRINT para mostrar las primeras observaciones de la nueva tabla, y la tabla temporal se elimina al final.
¡Copiado!
1LIBNAME mycas cas; /* Crée un libref CAS */
2 
3PROC CASUTIL outcaslib="casuser" replace;
4 load DATA=sashelp.cars casout="cars_cas";
5RUN;
6 
7DATA mycas.cars_with_eff;
8 SET mycas.cars_cas;
9 IF MPG_City > 25 THEN Efficiency_Category = 'Haute';
10 ELSE Efficiency_Category = 'Standard';
11 RUN;
12 
13PROC PRINT DATA=mycas.cars_with_eff(obs=5);
14 title 'Exemple Basique: Voitures avec catégorie d''efficacité';
15RUN;
16 
17PROC CASUTIL outcaslib="casuser" drop TABLE="cars_with_eff";
18RUN;
19 
2 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo intermedio muestra cómo filtrar datos y seleccionar variables específicas durante la ejecución de un paso DATA en CAS. Selecciona solo los coches de tipo 'Sports' con un consumo de combustible en carretera (MPG_Highway) superior a 20, utilizando una cláusula WHERE. La opción 'KEEP=' se utiliza para conservar solo las variables 'Make', 'Model', 'Type', 'Origin' y 'MSRP' en la tabla CAS de salida llamada 'sporty_cars'. Esto optimiza la tabla final al almacenar solo la información relevante.
¡Copiado!
1LIBNAME mycas cas;
2 
3PROC CASUTIL outcaslib="casuser" replace;
4 load DATA=sashelp.cars casout="cars_cas";
5RUN;
6 
7DATA mycas.sporty_cars(keep=Make Model Type Origin MSRP);
8 SET mycas.cars_cas;
9 where Type = 'Sports' and MPG_Highway > 20;
10 RUN;
11 
12PROC PRINT DATA=mycas.sporty_cars(obs=5);
13 title 'Exemple Intermédiaire: Voitures de sport économes en carburant';
14RUN;
15 
16PROC CASUTIL outcaslib="casuser" drop TABLE="sporty_cars";
17RUN;
18 
3 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo avanzado demuestra el uso de variables automáticas específicas para la ejecución distribuida en CAS, como '_N_', '_THREADID_' y '_HOSTNAME_'. Crea una nueva variable 'Row_ID' basada en '_N_' y una variable 'Thread_Info' para capturar los detalles del hilo y del nodo de trabajo CAS que procesa la observación. Además, utiliza CALL SYMPUTX para crear macrovariables para observaciones específicas, lo que puede ser útil para la auditoría o el seguimiento del procesamiento distribuido. Se incluye una macro para verificar la creación de estas macrovariables.
¡Copiado!
1LIBNAME mycas cas;
2 
3PROC CASUTIL outcaslib="casuser" replace;
4 load DATA=sashelp.cars casout="cars_cas";
5RUN;
6 
7DATA mycas.cars_processed;
8 SET mycas.cars_cas;
9 Row_ID = _N_;
10 Thread_Info = cats('Thread: ', _THREADID_, ' on node: ', _HOSTNAME_);
11 IF (_N_ between 1 and 10) or (mod(_N_, 100) = 0) THEN call symputx(cats('Obs',_N_), Make);
12 RUN;
13 
14%macro check_macros;
15 %global Obs1 Obs10 Obs100;
16 %IF %symexist(Obs1) %THEN %put Observation 1 (Make): &Obs1.;
17 %IF %symexist(Obs10) %THEN %put Observation 10 (Make): &Obs10.;
18 %IF %symexist(Obs100) %THEN %put Observation 100 (Make): &Obs100.;
19%mend;
20%check_macros;
21 
22PROC PRINT DATA=mycas.cars_processed(obs=10);
23 title 'Exemple Avancé: Traitement et informations de thread';
24RUN;
25 
26PROC CASUTIL outcaslib="casuser" drop TABLE="cars_processed";
27RUN;
28 
4 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo se centra en la gestión de datos y la escritura condicional en un paso DATA en CAS, una práctica común en el entorno Viya para la garantía de calidad de los datos. Comienza creando una tabla de datos local con algunos valores faltantes simulados, luego la carga en CAS. El paso DATA lee esta tabla y escribe las observaciones en dos tablas CAS de salida distintas: 'cars_clean' para los datos completos y 'cars_problematic' para las observaciones que contienen valores faltantes en las columnas de consumo de combustible. Se crea una variable calculada 'Avg_MPG' para los datos limpios. El uso de la palabra clave '_ERROR_' también permite señalar condiciones de error en el registro, lo que es útil para la depuración en un entorno distribuido. Este es un caso de uso típico para la preparación de datos antes de un análisis más profundo en CAS.
¡Copiado!
1LIBNAME mycas cas;
2 
3/* Création d'une table d'entrée avec quelques données manquantes */
4DATA cars_data_local;
5 INPUT Make $ Model $ Type $ MPG_City MPG_Highway;
6 DATALINES;
7Toyota Camry Sedan 28 39
8Honda Civic Sedan 30 40
9Ford F-150 Truck . 22
10Chevrolet Silverado Truck 16 .
11BMW X5 SUV 20 27
12;;
13RUN;
14 
15PROC CASUTIL outcaslib="casuser" replace;
16 load DATA=cars_data_local casout="cars_with_missing";
17RUN;
18 
19DATA mycas.cars_clean mycas.cars_problematic;
20 SET mycas.cars_with_missing;
21 /* Vérifier les valeurs manquantes pour la consommation de carburant */
22 IF missing(MPG_City) or missing(MPG_Highway) THEN DO;
23 OUTPUT mycas.cars_problematic; /* Écrire les lignes avec problèmes dans une table séparée */
24 _ERROR_ = 1; /* Marquer l'observation comme ayant une erreur pour le log */
25 END;
26 ELSE DO;
27 Avg_MPG = (MPG_City + MPG_Highway) / 2;
28 OUTPUT mycas.cars_clean;
29 END;
30 RUN;
31 
32PROC PRINT DATA=mycas.cars_clean(obs=5);
33 title 'Exemple Viya: Voitures sans données manquantes';
34RUN;
35 
36PROC PRINT DATA=mycas.cars_problematic(obs=5);
37 title 'Exemple Viya: Voitures avec données manquantes';
38RUN;
39 
40PROC CASUTIL outcaslib="casuser" drop TABLE="cars_with_missing" casout="cars_clean" casout="cars_problematic";
41RUN;
42 
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.