CAS CAS

Marcar una tabla CAS en memoria

Este código también está disponible en: Deutsch
Nivel de dificultad
Principiante
Publicado el :
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!
1LIBNAME mycas cas;
2 
3PROC CASUTIL;
4 load DATA=sashelp.baseball promote;
5RUN;
6 
7DATA mycas.baseball_scored_basic;
8 SET mycas.baseball;
9 IF nHits > 150 THEN score = 1;
10 ELSE score = 0;
11RUN;
12 
13/* Afficher un échantillon des données scorées */
14PROC PRINT DATA=mycas.baseball_scored_basic (obs=10);
15RUN;
16 
17/* Nettoyer la table CAS */
18PROC CAS;
19 TABLE.dropTable / caslib="CASUSER" name="baseball_scored_basic" quiet;
20 TABLE.dropTable / caslib="CASUSER" name="baseball" quiet;
21QUIT;
2 Bloque de código
DATA STEP Data
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!
1LIBNAME mycas cas;
2 
3/* Charger des données de démonstration dans CAS */
4DATA casuser.demo_players;
5 INPUT PlayerName $ AtBats Hits Runs RBIs;
6 DATALINES;
7John 200 60 30 25
8Mike 350 120 70 60
9Sarah 150 40 20 15
10Chris 400 130 80 65
11Emily 100 25 10 8
12;
13RUN;
14 
15PROC CASUTIL;
16 promote casdata="demo_players" caslib="CASUSER";
17RUN;
18 
19DATA 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 > 100 THEN PlayerScore = 3;
26 ELSE IF Avg >= 0.250 and Hits > 50 THEN PlayerScore = 2;
27 ELSE PlayerScore = 1;
28 
29 /* Masquer certaines variables de la sortie finale si non nécessaire */
30 drop AtBats Hits Runs RBIs;
31RUN;
32 
33/* Afficher un échantillon des données scorées avec les nouvelles variables */
34PROC PRINT DATA=mycas.players_scored_intermediate (obs=10);
35RUN;
36 
37/* Nettoyer les tables CAS */
38PROC CAS;
39 TABLE.dropTable / caslib="CASUSER" name="players_scored_intermediate" quiet;
40 TABLE.dropTable / caslib="CASUSER" name="demo_players" quiet;
41QUIT;
3 Bloque de código
DATA STEP Data
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!
1LIBNAME mycas cas;
2 
3/* Création des données de performance des joueurs (en CAS) */
4DATA casuser.player_stats;
5 INPUT PlayerID AtBats Hits;
6 DATALINES;
71 200 60
82 350 120
93 150 40
104 400 130
115 100 25
12;
13RUN;
14 
15/* Création des données de salaire des joueurs (en CAS) */
16DATA casuser.player_salary;
17 INPUT PlayerID Salary;
18 DATALINES;
191 50000
202 150000
213 30000
224 200000
235 20000
24;
25RUN;
26 
27PROC CASUTIL;
28 promote casdata="player_stats" caslib="CASUSER";
29 promote casdata="player_salary" caslib="CASUSER";
30RUN;
31 
32/* Définition de macro-variables pour les seuils de scoring */
33%let hits_threshold = 100;
34%let salary_threshold = 100000;
35 
36DATA 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 ELSE IF 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 */
50 FORMAT OverallScore ScoreFmt.;
51RUN;
52 
53/* Définition du format personnalisé */
54PROC FORMAT;
55 value ScoreFmt
56 1 = 'Faible'
57 2 = 'Moyen'
58 3 = 'Élevé';
59RUN;
60 
61/* Afficher les résultats */
62PROC PRINT DATA=mycas.player_combined_scored (obs=10);
63RUN;
64 
65/* Nettoyer les tables CAS */
66PROC CAS;
67 TABLE.dropTable / caslib="CASUSER" name="player_combined_scored" quiet;
68 TABLE.dropTable / caslib="CASUSER" name="player_stats" quiet;
69 TABLE.dropTable / caslib="CASUSER" name="player_salary" quiet;
70QUIT;
4 Bloque de código
DATA STEP / PROC CASUTIL Data
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!
1LIBNAME mycas cas;
2 
3/* Création d'une table de données temporaire pour le chargement */
4DATA _temp_data_for_cas;
5 INPUT ID Value;
6 DATALINES;
71 10
82 25
93 5
104 40
115 15
12;
13RUN;
14 
15/* Tenter de charger la table dans CAS avec gestion d'erreur */
16PROC CASUTIL;
17 /* Supprimer la table si elle existe déjà pour éviter des erreurs */
18 droptable casdata="my_scored_table" caslib="CASUSER" quiet;
19 droptable casdata="input_data" caslib="CASUSER" quiet;
20 
21 /* Charger et promouvoir la table */
22 load DATA=_temp_data_for_cas casout="input_data" caslib="CASUSER" promote;
23 IF _ERROR_ THEN put "ERREUR: Échec du chargement de la table 'input_data'.";
24RUN;
25 
26/* Scoring de la table chargée */
27DATA mycas.my_scored_table;
28 SET casuser.input_data;
29 IF Value > 20 THEN ScoreCategory = 'Haut';
30 ELSE IF Value > 10 THEN ScoreCategory = 'Moyen';
31 ELSE ScoreCategory = 'Bas';
32RUN;
33 
34/* Rendre la table CAS persistante pour les sessions futures */
35PROC CAS;
36 TABLE.save /
37 caslib="CASUSER"
38 name="my_scored_table"
39 path="my_scored_table.sashdat"
40 replace=TRUE;
41QUIT;
42 
43/* Vérifier la persistance en listant les fichiers sashdat */
44PROC CASUTIL;
45 list files caslib="CASUSER" path="my_scored_table.sashdat";
46RUN;
47 
48/* Afficher les résultats */
49PROC PRINT DATA=mycas.my_scored_table (obs=10);
50RUN;
51 
52/* Nettoyer la table CAS en mémoire (la version sashdat reste) */
53PROC CAS;
54 TABLE.dropTable / caslib="CASUSER" name="my_scored_table" quiet;
55 TABLE.dropTable / caslib="CASUSER" name="input_data" quiet;
56QUIT;
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.