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!
libname mycas cas; /* Crée un libref CAS */
proc casutil outcaslib="casuser" replace;
load data=sashelp.cars casout="cars_cas";
run;
data mycas.cars_with_eff;
set mycas.cars_cas;
if MPG_City > 25 then Efficiency_Category = 'Haute';
else Efficiency_Category = 'Standard';
run;
proc print data=mycas.cars_with_eff(obs=5);
title 'Exemple Basique: Voitures avec catégorie d''efficacité';
run;
proc casutil outcaslib="casuser" drop table="cars_with_eff";
run;
1
LIBNAME mycas cas; /* Crée un libref CAS */
2
3
PROC CASUTIL outcaslib="casuser" replace;
4
load DATA=sashelp.cars casout="cars_cas";
5
RUN;
6
7
DATA mycas.cars_with_eff;
8
SET mycas.cars_cas;
9
IF MPG_City > 25THEN Efficiency_Category = 'Haute';
10
ELSE Efficiency_Category = 'Standard';
11
RUN;
12
13
PROC PRINTDATA=mycas.cars_with_eff(obs=5);
14
title 'Exemple Basique: Voitures avec catégorie d''efficacité';
15
RUN;
16
17
PROC CASUTIL outcaslib="casuser" drop TABLE="cars_with_eff";
18
RUN;
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!
libname mycas cas;
proc casutil outcaslib="casuser" replace;
load data=sashelp.cars casout="cars_cas";
run;
data mycas.sporty_cars(keep=Make Model Type Origin MSRP);
set mycas.cars_cas;
where Type = 'Sports' and MPG_Highway > 20;
run;
proc print data=mycas.sporty_cars(obs=5);
title 'Exemple Intermédiaire: Voitures de sport économes en carburant';
run;
proc casutil outcaslib="casuser" drop table="sporty_cars";
run;
1
LIBNAME mycas cas;
2
3
PROC CASUTIL outcaslib="casuser" replace;
4
load DATA=sashelp.cars casout="cars_cas";
5
RUN;
6
7
DATA 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
12
PROC PRINTDATA=mycas.sporty_cars(obs=5);
13
title 'Exemple Intermédiaire: Voitures de sport économes en carburant';
14
RUN;
15
16
PROC CASUTIL outcaslib="casuser" drop TABLE="sporty_cars";
17
RUN;
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!
libname mycas cas;
proc casutil outcaslib="casuser" replace;
load data=sashelp.cars casout="cars_cas";
run;
data mycas.cars_processed;
set mycas.cars_cas;
Row_ID = _N_;
Thread_Info = cats('Thread: ', _THREADID_, ' on node: ', _HOSTNAME_);
if (_N_ between 1 and 10) or (mod(_N_, 100) = 0) then call symputx(cats('Obs',_N_), Make);
run;
%macro check_macros;
%global Obs1 Obs10 Obs100;
%if %symexist(Obs1) %then %put Observation 1 (Make): &Obs1.;
%if %symexist(Obs10) %then %put Observation 10 (Make): &Obs10.;
%if %symexist(Obs100) %then %put Observation 100 (Make): &Obs100.;
%mend;
%check_macros;
proc print data=mycas.cars_processed(obs=10);
title 'Exemple Avancé: Traitement et informations de thread';
run;
proc casutil outcaslib="casuser" drop table="cars_processed";
run;
1
LIBNAME mycas cas;
2
3
PROC CASUTIL outcaslib="casuser" replace;
4
load DATA=sashelp.cars casout="cars_cas";
5
RUN;
6
7
DATA 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);
title 'Exemple Avancé: Traitement et informations de thread';
24
RUN;
25
26
PROC CASUTIL outcaslib="casuser" drop TABLE="cars_processed";
27
RUN;
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!
libname mycas cas;
/* Création d'une table d'entrée avec quelques données manquantes */
data cars_data_local;
input Make $ Model $ Type $ MPG_City MPG_Highway;
datalines;
Toyota Camry Sedan 28 39
Honda Civic Sedan 30 40
Ford F-150 Truck . 22
Chevrolet Silverado Truck 16 .
BMW X5 SUV 20 27
;;
run;
proc casutil outcaslib="casuser" replace;
load data=cars_data_local casout="cars_with_missing";
run;
data mycas.cars_clean mycas.cars_problematic;
set mycas.cars_with_missing;
/* Vérifier les valeurs manquantes pour la consommation de carburant */
if missing(MPG_City) or missing(MPG_Highway) then do;
output mycas.cars_problematic; /* Écrire les lignes avec problèmes dans une table séparée */
_ERROR_ = 1; /* Marquer l'observation comme ayant une erreur pour le log */
end;
else do;
Avg_MPG = (MPG_City + MPG_Highway) / 2;
output mycas.cars_clean;
end;
run;
proc print data=mycas.cars_clean(obs=5);
title 'Exemple Viya: Voitures sans données manquantes';
run;
proc print data=mycas.cars_problematic(obs=5);
title 'Exemple Viya: Voitures avec données manquantes';
run;
proc casutil outcaslib="casuser" drop table="cars_with_missing" casout="cars_clean" casout="cars_problematic";
run;
1
LIBNAME mycas cas;
2
3
/* Création d'une table d'entrée avec quelques données manquantes */
/* Vérifier les valeurs manquantes pour la consommation de carburant */
22
IF missing(MPG_City) or missing(MPG_Highway) THENDO;
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
ELSEDO;
27
Avg_MPG = (MPG_City + MPG_Highway) / 2;
28
OUTPUT mycas.cars_clean;
29
END;
30
RUN;
31
32
PROC PRINTDATA=mycas.cars_clean(obs=5);
33
title 'Exemple Viya: Voitures sans données manquantes';
34
RUN;
35
36
PROC PRINTDATA=mycas.cars_problematic(obs=5);
37
title 'Exemple Viya: Voitures avec données manquantes';
38
RUN;
39
40
PROC CASUTIL outcaslib="casuser" drop TABLE="cars_with_missing" casout="cars_clean" casout="cars_problematic";
41
RUN;
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.