Les exemples utilisent des données SASHELP (sashelp.cars) ou des tables créées en interne (datalines) pour assurer leur autonomie et leur reproductibilité.
1 Bloc de code
DATA STEP Data
Explication : Cet exemple illustre l'utilisation de la variable automatique _THREADID_ pour voir quel thread traite chaque observation dans un DATA Step multithreaded sur CAS. Il utilise également FIRST.make pour identifier le début de chaque groupe 'make'.
Copié !
data mycas.cars;
set sashelp.cars;
run;
data mycas.cars_processed;
set mycas.cars;
by make type;
if first.make then first_make_flag="BY Group";
else first_make_flag="";
threadid = _threadid_;
keep make type first_make_flag threadid;
run;
proc print data=mycas.cars_processed;
title 'Cars By Make By Type - Multithreaded Processing';
run;
1
DATA mycas.cars;
2
SET sashelp.cars;
3
RUN;
4
5
DATA mycas.cars_processed;
6
SET mycas.cars;
7
BY make type;
8
IF first.make THEN first_make_flag="BY Group";
9
ELSE first_make_flag="";
10
threadid = _threadid_;
11
keep make type first_make_flag threadid;
12
RUN;
13
PROC PRINTDATA=mycas.cars_processed;
14
title 'Cars By Make By Type - Multithreaded Processing';
15
RUN;
16
2 Bloc de code
DATA STEP Data
Explication : Ce cas compare l'exécution par défaut (multithread) et l'exécution forcée en monothread (via SINGLE=YES) dans CAS, en utilisant _THREADID_ pour montrer la différence dans les IDs de thread attribués. Seuls les 10 premières observations sont affichées pour la comparaison.
Copié !
data mycas.cars;
set sashelp.cars;
run;
/* Exécution multithread par défaut */
data mycas.cars_multi;
set mycas.cars;
threadid = _threadid_;
keep make model threadid;
run;
/* Exécution monothread forcée */
data mycas.cars_single(single=yes);
set mycas.cars;
threadid = _threadid_;
keep make model threadid;
run;
proc print data=mycas.cars_multi(obs=10);
title 'Traitement Multithread (extrait)';
run;
proc print data=mycas.cars_single(obs=10);
title 'Traitement Monothread (extrait)';
run;
1
DATA mycas.cars;
2
SET sashelp.cars;
3
RUN;
4
5
/* Exécution multithread par défaut */
6
DATA mycas.cars_multi;
7
SET mycas.cars;
8
threadid = _threadid_;
9
keep make model threadid;
10
RUN;
11
12
/* Exécution monothread forcée */
13
DATA mycas.cars_single(single=yes);
14
SET mycas.cars;
15
threadid = _threadid_;
16
keep make model threadid;
17
RUN;
18
19
PROC PRINTDATA=mycas.cars_multi(obs=10);
20
title 'Traitement Multithread (extrait)';
21
RUN;
22
PROC PRINTDATA=mycas.cars_single(obs=10);
23
title 'Traitement Monothread (extrait)';
24
RUN;
25
3 Bloc de code
DATA STEP Data
Explication : Cet exemple avancé combine les variables automatiques _THREADID_, _N_ (numéro d'itération du DATA Step) et _ERROR_ (indicateur d'erreur) au sein d'un DATA Step exécuté en CAS. Il montre comment ces variables se comportent dans un environnement multithread et comment _ERROR_ peut être manipulé pour signaler des conditions spécifiques, en plus d'identifier le début des groupes BY.
Copié !
data _null_;
input id $ value;
datalines;
1 A
1 B
2 C
3 D
3 E
4 F
;
run;
data mycas.test_data;
set _null_;
run;
data mycas.processed_data;
set mycas.test_data;
by id;
if first.id then group_start = 1;
else group_start = 0;
record_num = _n_;
thread_id = _threadid_;
if value = 'B' then _error_ = 1;
error_flag = _error_;
keep id value group_start record_num thread_id error_flag;
run;
proc print data=mycas.processed_data;
title 'Analyse des Variables Automatiques _N_ et _ERROR_ dans CAS';
run;
1
DATA _null_;
2
INPUT id $ value;
3
DATALINES;
4
1 A
5
1 B
6
2 C
7
3 D
8
3 E
9
4 F
10
;
11
RUN;
12
13
DATA mycas.test_data;
14
SET _null_;
15
RUN;
16
17
DATA mycas.processed_data;
18
SET mycas.test_data;
19
BY id;
20
IF first.id THEN group_start = 1;
21
ELSE group_start = 0;
22
record_num = _n_;
23
thread_id = _threadid_;
24
IF value = 'B'THEN _error_ = 1;
25
error_flag = _error_;
26
keep id value group_start record_num thread_id error_flag;
27
RUN;
28
29
PROC PRINTDATA=mycas.processed_data;
30
title 'Analyse des Variables Automatiques _N_ et _ERROR_ dans CAS';
31
RUN;
32
4 Bloc de code
DATA STEP Data
Explication : Cet exemple est conçu pour la performance et le débogage dans un environnement CAS. Il crée un jeu de données de 100 observations réparties en groupes. Le DATA Step utilise _THREADID_ pour afficher dans le log (via l'instruction PUT) quel thread commence le traitement de chaque nouveau groupe. Cela peut être utile pour comprendre la distribution de la charge de travail et le parallélisme effectif du DATA Step sur le cluster CAS, en particulier pour identifier des déséquilibres potentiels ou pour vérifier que le traitement est bien distribué. L'output n'est qu'un aperçu, l'information principale étant dans le log.
Copié !
/* Création d'une table CAS temporaire */
data mycas.sample_data;
do i = 1 to 100;
group = ceil(i/10);
value = ranuni(0) * 100;
output;
end;
run;
/* DATA Step avec logging pour suivre les threads */
data mycas.debug_output;
set mycas.sample_data;
by group;
thread_id = _threadid_;
if first.group then do;
put 'DEBUG: Nouveau groupe ' group ' sur thread ' thread_id;
end;
output;
run;
/* Affichage des 10 premières lignes du résultat pour validation */
proc print data=mycas.debug_output(obs=10);
title 'Sortie du DATA Step avec IDs de Thread';
run;
/* Pour une analyse complète du logging, consulter le log SAS Studio */
1
/* Création d'une table CAS temporaire */
2
DATA mycas.sample_data;
3
DO i = 1 to 100;
4
group = ceil(i/10);
5
value = ranuni(0) * 100;
6
OUTPUT;
7
END;
8
RUN;
9
10
/* DATA Step avec logging pour suivre les threads */
11
DATA mycas.debug_output;
12
SET mycas.sample_data;
13
BY group;
14
thread_id = _threadid_;
15
IF first.group THENDO;
16
put 'DEBUG: Nouveau groupe ' group ' sur thread ' thread_id;
17
END;
18
OUTPUT;
19
RUN;
20
21
/* Affichage des 10 premières lignes du résultat pour validation */
22
PROC PRINTDATA=mycas.debug_output(obs=10);
23
title 'Sortie du DATA Step avec IDs de Thread';
24
RUN;
25
26
/* Pour une analyse complète du logging, consulter le log SAS Studio */
27
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.