Cuando se ejecuta el paso DATA en el servidor CAS, este se ejecuta en múltiples hilos sobre datos en memoria, lo que permite un procesamiento más rápido. Para ejecutar el paso DATA en un servidor CAS, debe especificar una libref del motor CAS para los conjuntos de datos de entrada y salida. Además, debe asegurarse de que todos los elementos de lenguaje del paso DATA sean válidos para el servidor CAS. Consulte las secciones 'Compatibilidad y limitaciones de los elementos de lenguaje' y 'Restricciones para el procesamiento del paso DATA en CAS' para obtener más información sobre la compatibilidad de los elementos de lenguaje.
Análisis de datos
Type : CREATION_INTERNE
Los ejemplos utilizan datos generados (datalines) o SASHELP para garantizar su autonomía y reproducibilidad.
1 Bloque de código
DATA STEP Data
Explicación : Este ejemplo básico muestra cómo cargar el conjunto de datos SASHELP.BASEBALL en CAS y aplicar una lógica de puntuación simple. La variable 'score' se establece en 1 si 'nHits' es mayor que 150, de lo contrario es 0. Las tablas CAS temporales se limpian después de su uso.
¡Copiado!
libname mycas cas;
proc casutil;
load data=sashelp.baseball promote;
run;
data mycas.baseball_scored_basic;
set mycas.baseball;
if nHits > 150 then score = 1;
else score = 0;
run;
/* Afficher un échantillon des données scorées */
proc print data=mycas.baseball_scored_basic (obs=10);
run;
/* Nettoyer la table CAS */
proc cas;
table.dropTable / caslib="CASUSER" name="baseball_scored_basic" quiet;
table.dropTable / caslib="CASUSER" name="baseball" quiet;
quit;
Explicación : Este ejemplo intermedio crea datos ficticios y los carga en CAS. Calcula un promedio de bateo (Avg) y aplica una puntuación ('PlayerScore') basada en múltiples condiciones (`IF-THEN-ELSE`). La opción `DROP` se utiliza para excluir ciertas variables de la tabla resultante, demostrando la manipulación de variables en un contexto de puntuación.
¡Copiado!
libname mycas cas;
/* Charger des données de démonstration dans CAS */
data casuser.demo_players;
input PlayerName $ AtBats Hits Runs RBIs;
datalines;
John 200 60 30 25
Mike 350 120 70 60
Sarah 150 40 20 15
Chris 400 130 80 65
Emily 100 25 10 8
;
run;
proc casutil;
promote casdata="demo_players" caslib="CASUSER";
run;
data mycas.players_scored_intermediate;
set casuser.demo_players;
/* Ajouter une variable de moyenne de frappe */
Avg = Hits / AtBats;
/* Appliquer des scores basés sur plusieurs critères */
if Avg >= 0.300 and Hits > 100 then PlayerScore = 3;
else if Avg >= 0.250 and Hits > 50 then PlayerScore = 2;
else PlayerScore = 1;
/* Masquer certaines variables de la sortie finale si non nécessaire */
drop AtBats Hits Runs RBIs;
run;
/* Afficher un échantillon des données scorées avec les nouvelles variables */
proc print data=mycas.players_scored_intermediate (obs=10);
run;
/* Nettoyer les tables CAS */
proc cas;
table.dropTable / caslib="CASUSER" name="players_scored_intermediate" quiet;
table.dropTable / caslib="CASUSER" name="demo_players" quiet;
quit;
1
LIBNAME mycas cas;
2
3
/* Charger des données de démonstration dans CAS */
4
DATA casuser.demo_players;
5
INPUT PlayerName $ AtBats Hits Runs RBIs;
6
DATALINES;
7
John 200603025
8
Mike 3501207060
9
Sarah 150402015
10
Chris 4001308065
11
Emily 10025108
12
;
13
RUN;
14
15
PROC CASUTIL;
16
promote casdata="demo_players" caslib="CASUSER";
17
RUN;
18
19
DATA mycas.players_scored_intermediate;
20
SET casuser.demo_players;
21
/* Ajouter une variable de moyenne de frappe */
22
Avg = Hits / AtBats;
23
24
/* Appliquer des scores basés sur plusieurs critères */
25
IF Avg >= 0.300 and Hits > 100THEN PlayerScore = 3;
Explicación : Este ejemplo avanzado muestra cómo combinar datos de varias tablas CAS ('player_stats' y 'player_salary') utilizando la instrucción `MERGE`. Utiliza macrovariables (`%LET`) para parametrizar los umbrales de puntuación, lo que permite una mayor flexibilidad. Se aplica un formato personalizado (`ScoreFmt.`) a la variable 'OverallScore' para una mejor legibilidad de los resultados.
¡Copiado!
libname mycas cas;
/* Création des données de performance des joueurs (en CAS) */
data casuser.player_stats;
input PlayerID AtBats Hits;
datalines;
1 200 60
2 350 120
3 150 40
4 400 130
5 100 25
;
run;
/* Création des données de salaire des joueurs (en CAS) */
data casuser.player_salary;
input PlayerID Salary;
datalines;
1 50000
2 150000
3 30000
4 200000
5 20000
;
run;
proc casutil;
promote casdata="player_stats" caslib="CASUSER";
promote casdata="player_salary" caslib="CASUSER";
run;
/* Définition de macro-variables pour les seuils de scoring */
%let hits_threshold = 100;
%let salary_threshold = 100000;
data mycas.player_combined_scored;
merge casuser.player_stats (in=s)
casuser.player_salary (in=l);
by PlayerID;
if s and l; /* S'assurer que les enregistrements existent dans les deux tables */
BattingAverage = Hits / AtBats;
/* Logique de scoring avancée */
if Hits > &hits_threshold and Salary > &salary_threshold then OverallScore = 3;
else if Hits > (&hits_threshold / 2) or Salary > (&salary_threshold / 2) then OverallScore = 2;
else OverallScore = 1;
/* Exemple d'utilisation d'un format pour la variable Score */
format OverallScore ScoreFmt.;
run;
/* Définition du format personnalisé */
proc format;
value ScoreFmt
1 = 'Faible'
2 = 'Moyen'
3 = 'Élevé';
run;
/* Afficher les résultats */
proc print data=mycas.player_combined_scored (obs=10);
run;
/* Nettoyer les tables CAS */
proc cas;
table.dropTable / caslib="CASUSER" name="player_combined_scored" quiet;
table.dropTable / caslib="CASUSER" name="player_stats" quiet;
table.dropTable / caslib="CASUSER" name="player_salary" quiet;
quit;
1
LIBNAME mycas cas;
2
3
/* Création des données de performance des joueurs (en CAS) */
4
DATA casuser.player_stats;
5
INPUT PlayerID AtBats Hits;
6
DATALINES;
7
120060
8
2350120
9
315040
10
4400130
11
510025
12
;
13
RUN;
14
15
/* Création des données de salaire des joueurs (en CAS) */
16
DATA casuser.player_salary;
17
INPUT PlayerID Salary;
18
DATALINES;
19
150000
20
2150000
21
330000
22
4200000
23
520000
24
;
25
RUN;
26
27
PROC CASUTIL;
28
promote casdata="player_stats" caslib="CASUSER";
29
promote casdata="player_salary" caslib="CASUSER";
30
RUN;
31
32
/* Définition de macro-variables pour les seuils de scoring */
33
%let hits_threshold = 100;
34
%let salary_threshold = 100000;
35
36
DATA mycas.player_combined_scored;
37
MERGE casuser.player_stats (in=s)
38
casuser.player_salary (in=l);
39
BY PlayerID;
40
IF s and l; /* S'assurer que les enregistrements existent dans les deux tables */
41
42
BattingAverage = Hits / AtBats;
43
44
/* Logique de scoring avancée */
45
IF Hits > &hits_threshold and Salary > &salary_threshold THEN OverallScore = 3;
46
ELSEIF Hits > (&hits_threshold / 2) or Salary > (&salary_threshold / 2) THEN OverallScore = 2;
47
ELSE OverallScore = 1;
48
49
/* Exemple d'utilisation d'un format pour la variable Score */
Explicación : Este ejemplo enfatiza la robustez de la integración CAS. Crea datos temporales, los carga en CAS incluyendo una gestión básica de errores (`if _ERROR_`). Después de la puntuación, la tabla se hace persistente guardándola en formato 'sashdat' usando la acción `table.save`. La existencia del archivo 'sashdat' se verifica para confirmar la persistencia de los datos más allá de la sesión CAS actual.
¡Copiado!
libname mycas cas;
/* Création d'une table de données temporaire pour le chargement */
data _temp_data_for_cas;
input ID Value;
datalines;
1 10
2 25
3 5
4 40
5 15
;
run;
/* Tenter de charger la table dans CAS avec gestion d'erreur */
proc casutil;
/* Supprimer la table si elle existe déjà pour éviter des erreurs */
droptable casdata="my_scored_table" caslib="CASUSER" quiet;
droptable casdata="input_data" caslib="CASUSER" quiet;
/* Charger et promouvoir la table */
load data=_temp_data_for_cas casout="input_data" caslib="CASUSER" promote;
if _ERROR_ then put "ERREUR: Échec du chargement de la table 'input_data'.";
run;
/* Scoring de la table chargée */
data mycas.my_scored_table;
set casuser.input_data;
if Value > 20 then ScoreCategory = 'Haut';
else if Value > 10 then ScoreCategory = 'Moyen';
else ScoreCategory = 'Bas';
run;
/* Rendre la table CAS persistante pour les sessions futures */
proc cas;
table.save /
caslib="CASUSER"
name="my_scored_table"
path="my_scored_table.sashdat"
replace=TRUE;
quit;
/* Vérifier la persistance en listant les fichiers sashdat */
proc casutil;
list files caslib="CASUSER" path="my_scored_table.sashdat";
run;
/* Afficher les résultats */
proc print data=mycas.my_scored_table (obs=10);
run;
/* Nettoyer la table CAS en mémoire (la version sashdat reste) */
proc cas;
table.dropTable / caslib="CASUSER" name="my_scored_table" quiet;
table.dropTable / caslib="CASUSER" name="input_data" quiet;
quit;
1
LIBNAME mycas cas;
2
3
/* Création d'une table de données temporaire pour le chargement */
4
DATA _temp_data_for_cas;
5
INPUT ID Value;
6
DATALINES;
7
110
8
225
9
35
10
440
11
515
12
;
13
RUN;
14
15
/* Tenter de charger la table dans CAS avec gestion d'erreur */
16
PROC CASUTIL;
17
/* Supprimer la table si elle existe déjà pour éviter des erreurs */
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.