La macro `%mp_testjob` est conçue pour tester les performances ou maintenir une session active. Elle initialise une bibliothèque temporaire dans WORK, puis entre dans une boucle conditionnée par la durée d'exécution souhaitée (paramètre `duration`). À chaque itération, elle génère un jeu de données volumineux (1 million d'observations) avec des valeurs aléatoires, l'agrège via PROC SUMMARY, l'enrichit via PROC SQL, et le trie via PROC SORT. Elle inclut une pause de 5 secondes entre les cycles. Enfin, elle nettoie les datasets et libère la bibliothèque.
Analyse des données
Type : CREATION_INTERNE
Les données sont générées algorithmiquement (fonction `ranuni`) à l'intérieur de la macro. Aucune dépendance de données externe.
1 Bloc de code
Macro Variable
Explication : Initialisation du chronomètre et création d'un espace de travail temporaire (dossier et libref) unique pour isoler les données du test.
Copié !
%let start_tm=%sysfunc(datetime());
%let duration=%sysevalf(&duration);
/* create a temporary library in WORK */
%let lib=%mf_getuniquelibref();
%let dir=%mf_getuniquename();
%mf_mkdir(%sysfunc(pathname(work))/&dir)
libname &lib "%sysfunc(pathname(work))/&dir";
1
%let start_tm=%sysfunc(datetime());
2
%let duration=%sysevalf(&duration);
3
4
/* create a temporary library in WORK */
5
%let lib=%mf_getuniquelibref();
6
%let dir=%mf_getuniquename();
7
%mf_mkdir(%sysfunc(pathname(work))/&dir)
8
LIBNAME &lib "%sysfunc(pathname(work))/&dir";
2 Bloc de code
DATA STEP Data
Explication : Génération d'un jeu de données volumineux (1M lignes) contenant des nombres aléatoires et une chaîne de caractères répétée, sans compression pour maximiser l'I/O.
Copié !
data &lib..&ds1(compress=no );
do x=1 to 1000000;
randnum0=ranuni(0)*3;
randnum1=ranuni(0)*2;
bigchar=repeat('A',300);
output;
end;
run;
1
DATA &lib..&ds1(compress=no );
2
DO x=1 to 1000000;
3
randnum0=ranuni(0)*3;
4
randnum1=ranuni(0)*2;
5
bigchar=repeat('A',300);
6
OUTPUT;
7
END;
8
RUN;
3 Bloc de code
PROC SUMMARY Data
Explication : Exécution d'une procédure de statistique descriptive pour consommer du CPU et de la mémoire sur les données générées.
Copié !
proc summary ;
class randnum0 randnum1;
output out=&lib..&ds2;
run;quit;
1
PROC SUMMARY ;
2
class randnum0 randnum1;
3
OUTPUT out=&lib..&ds2;
4
RUN;QUIT;
4 Bloc de code
PROC SQL Data
Explication : Utilisation de SQL pour créer une nouvelle table triée avec une colonne calculée supplémentaire, testant les performances du moteur SQL.
Copié !
proc sql;
create table &lib..&ds3 as
select *, ranuni(0)*10 as randnum2
from &lib..&ds1
order by randnum1;
quit;
1
PROC SQL;
2
create TABLE &lib..&ds3 as
3
select *, ranuni(0)*10 as randnum2
4
from &lib..&ds1
5
order BY randnum1;
6
QUIT;
5 Bloc de code
PROC SORT
Explication : Tri du jeu de données résultant pour tester les performances de tri (I/O intensif).
Copié !
proc sort data=&lib..&ds3;
by descending x;
run;
1
PROC SORTDATA=&lib..&ds3;
2
BY descending x;
3
RUN;
6 Bloc de code
DATA STEP
Explication : Pause de 5 secondes dans l'exécution pour simuler un temps d'attente ou réduire la pression continue sur le système.
Copié !
data _null_;
call sleep(5,1);
run;
1
DATA _null_;
2
call sleep(5,1);
3
RUN;
7 Bloc de code
PROC DATASETS
Explication : Nettoyage final : suppression de toutes les tables créées dans la bibliothèque temporaire et libération de l'assignation de la bibliothèque.
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.