Los ejemplos utilizan datos SASHELP (sashelp.cars) o tablas creadas internamente (datalines) para asegurar su autonomía y reproducibilidad.
1 Bloque de código
DATA STEP Data
Explicación : Este ejemplo ilustra el uso de la variable automática _THREADID_ para ver qué thread procesa cada observación en un DATA Step multithread en CAS. También usa FIRST.make para identificar el inicio de cada grupo 'make'.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación : Este caso compara la ejecución predeterminada (multithread) y la ejecución forzada en monothread (mediante SINGLE=YES) en CAS, utilizando _THREADID_ para mostrar la diferencia en los IDs de thread asignados. Solo se muestran las 10 primeras observaciones para la comparación.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación : Este ejemplo avanzado combina las variables automáticas _THREADID_, _N_ (número de iteración del DATA Step) y _ERROR_ (indicador de error) dentro de un DATA Step ejecutado en CAS. Muestra cómo estas variables se comportan en un entorno multithread y cómo se puede manipular _ERROR_ para señalar condiciones específicas, además de identificar el inicio de los grupos BY.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación : Este ejemplo está diseñado para el rendimiento y la depuración en un entorno CAS. Crea un conjunto de datos de 100 observaciones divididas en grupos. El DATA Step utiliza _THREADID_ para mostrar en el log (mediante la instrucción PUT) qué thread comienza el procesamiento de cada nuevo grupo. Esto puede ser útil para comprender la distribución de la carga de trabajo y el paralelismo efectivo del DATA Step en el clúster CAS, especialmente para identificar posibles desequilibrios o para verificar que el procesamiento está bien distribuido. La salida es solo una vista previa, la información principal está en el log.
¡Copiado!
/* 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
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.