Le programme évalue la fonctionnalité de la macro `%mp_sortinplace` dans deux scénarios. Le premier scénario crée une table temporaire `work.example` à partir de `sashelp.classfit`, ajoute une contrainte de clé primaire et applique `%mp_sortinplace`, puis vérifie que les contraintes sont bien recréées et que le tri est effectif (première observation 'Alfred'). Le second scénario crée `work.example2` sans contrainte de clé primaire, applique `%mp_sortinplace`, et confirme que l'opération se déroule sans erreur et que le tri est également appliqué correctement.
Analyse des données
Type : MIXTE
Le script utilise `sashelp.classfit` comme source de données initiale pour créer des tables de travail temporaires (`work.example`, `work.example2`). Les résultats des tests et les contraintes extraites sont stockés dans d'autres tables de travail (`work.testme`, `work.test_results`).
1 Bloc de code
PROC SQL / MACRO %mp_sortinplace Data
Explication : Ce bloc initialise le premier scénario de test. Il crée une nouvelle table `work.example` en copiant le contenu de `sashelp.classfit`. Une contrainte de clé primaire est ensuite ajoutée sur la colonne `name`. Enfin, la macro `%mp_sortinplace` est appelée pour trier cette table en place.
Copié !
proc sql;
create table work.example as
select * from sashelp.classfit;
alter table work.example
add constraint pk primary key(name);
%mp_sortinplace(work.example)
1
PROC SQL;
2
create TABLE work.example as
3
select * from sashelp.classfit;
4
alter TABLE work.example
5
add constraint pk primary key(name);
6
%mp_sortinplace(work.example)
2 Bloc de code
MACRO %mp_getconstraints / %mp_assertdsobs Data
Explication : Ce bloc vérifie la gestion des contraintes. La macro `%mp_getconstraints` est utilisée pour extraire les informations de contrainte de `work.example` et les enregistrer dans `work.testme`. Ensuite, la macro `%mp_assertdsobs` affirme qu'il y a exactement une observation dans `work.testme`, confirmant que la contrainte de clé primaire a été correctement détectée et traitée après le tri.
Explication : Ce bloc valide le résultat du tri. Il utilise un `DATA _NULL_` pour lire la première valeur de la colonne `name` de la table triée `work.example` et la stocke dans la macro-variable `test1`. La macro `%mp_assert` est ensuite utilisée pour vérifier que `test1` est bien 'Alfred', ce qui confirme que la table a été triée par ordre alphabétique croissant de la colonne `name`.
Copié !
%let test1=0;
data _null_;
set work.example;
call symputx('test1',name);
stop;
run;
%mp_assert(
iftrue=(
%str(&test1)=%str(Alfred)
),
desc=Check if sort was appplied,
outds=work.test_results
)
1
%let test1=0;
2
DATA _null_;
3
SET work.example;
4
call symputx('test1',name);
5
stop;
6
RUN;
7
%mp_assert(
8
iftrue=(
9
%str(&test1)=%str(Alfred)
10
),
11
desc=Check IF sort was appplied,
12
outds=work.test_results
13
)
4 Bloc de code
PROC SQL / MACRO %mp_sortinplace Data
Explication : Ce bloc initie le second scénario de test. Il crée une nouvelle table `work.example2` à partir de `sashelp.classfit`, cette fois-ci sans ajouter de contrainte de clé primaire. La macro `%mp_sortinplace` est appelée sur cette table pour tester son comportement en l'absence de contraintes explicites.
Copié !
proc sql;
create table work.example2 as
select * from sashelp.classfit;
%mp_sortinplace(work.example2)
1
PROC SQL;
2
create TABLE work.example2 as
3
select * from sashelp.classfit;
4
%mp_sortinplace(work.example2)
5 Bloc de code
MACRO %mp_assert / DATA STEP / MACRO %mp_assert
Explication : Ce bloc contient deux assertions pour le deuxième test. La première utilise `%mp_assert` pour vérifier que la macro `%mp_sortinplace` s'est exécutée avec succès (code de retour système `&syscc` égal à 0) même sans clé primaire. La seconde assertion, via un `DATA _NULL_` et `%mp_assert`, vérifie de nouveau que le tri a été appliqué correctement en confirmant que la première valeur de `name` dans `work.example2` est 'Alfred'.
Copié !
%mp_assert(
iftrue=(
%str(&syscc)=%str(0)
),
desc=Ensure no errors when no key exists,
outds=work.test_results
)
%let test2=0;
data _null_;
set work.example2;
call symputx('test2',name);
stop;
run;
%mp_assert(
iftrue=(
%str(&test2)=%str(Alfred)
),
desc=Check if sort was appplied when no index exists,
outds=work.test_results
)
1
%mp_assert(
2
iftrue=(
3
%str(&syscc)=%str(0)
4
),
5
desc=Ensure no errors when no key exists,
6
outds=work.test_results
7
)
8
9
%let test2=0;
10
DATA _null_;
11
SET work.example2;
12
call symputx('test2',name);
13
stop;
14
RUN;
15
%mp_assert(
16
iftrue=(
17
%str(&test2)=%str(Alfred)
18
),
19
desc=Check IF sort was appplied when no index exists,
20
outds=work.test_results
21
)
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.