Wenn Sie den DATA-Schritt im CAS-Server ausführen, läuft dieser auf mehreren Threads auf In-Memory-Daten ab, was eine schnellere Verarbeitung ermöglicht. Um den DATA-Schritt in einem CAS-Server auszuführen, müssen Sie ein CAS-Engine-Libref für die Eingabe- und Ausgabedatensätze angeben. Außerdem müssen Sie sicherstellen, dass alle Sprachlemente des DATA-Schritts für den CAS-Server gültig sind. Weitere Informationen zur Unterstützung von Sprachlementen finden Sie in den Abschnitten 'Unterstützung und Einschränkungen von Sprachlementen' und 'Einschränkungen für die Verarbeitung des DATA-Schritts in CAS'.
Datenanalyse
Type : CREATION_INTERNE
Die Beispiele verwenden generierte Daten (Datalines) oder SASHELP, um ihre Autonomie und Reproduzierbarkeit zu gewährleisten.
1 Codeblock
DATA STEP Data
Erklärung : Dieses grundlegende Beispiel zeigt, wie das SASHELP.BASEBALL-Dataset in CAS geladen und eine einfache Scoring-Logik angewendet wird. Die Variable 'score' wird auf 1 gesetzt, wenn 'nHits' größer als 150 ist, andernfalls auf 0. Temporäre CAS-Tabellen werden nach Gebrauch bereinigt.
Kopiert!
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;
Erklärung : Dieses Zwischenbeispiel erstellt Scheindaten und lädt sie in CAS. Es berechnet einen Batting Average (Avg) und wendet eine Punktzahl ('PlayerScore') basierend auf mehreren Bedingungen (`IF-THEN-ELSE`) an. Die Option `DROP` wird verwendet, um bestimmte Variablen aus der resultierenden Tabelle auszuschließen, was die Variablenmanipulation im Scoring-Kontext demonstriert.
Kopiert!
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;
Erklärung : Dieses fortgeschrittene Beispiel zeigt, wie Daten aus mehreren CAS-Tabellen ('player_stats' und 'player_salary') mithilfe der `MERGE`-Anweisung kombiniert werden. Es verwendet Makrovariablen (`%LET`), um die Scoring-Schwellenwerte zu parametrisieren, was eine größere Flexibilität ermöglicht. Ein benutzerdefiniertes Format (`ScoreFmt.`) wird auf die Variable 'OverallScore' angewendet, um die Lesbarkeit der Ergebnisse zu verbessern.
Kopiert!
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 */
Erklärung : Dieses Beispiel konzentriert sich auf die Robustheit der CAS-Integration. Es erstellt temporäre Daten und lädt sie in CAS, einschließlich einer grundlegenden Fehlerbehandlung (`if _ERROR_`). Nach dem Scoring wird die Tabelle persistent gemacht, indem sie im 'sashdat'-Format mit der Aktion `table.save` gespeichert wird. Die Existenz der 'sashdat'-Datei wird überprüft, um die Datenpersistenz über die aktuelle CAS-Sitzung hinaus zu bestätigen.
Kopiert!
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 */
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.