Publié le :
Test CREATION_INTERNE

Test de la macro mp_getformats et gestion de FMTSEARCH

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script commence par créer deux répertoires temporaires (`&sasjswork/path1` et `&sasjswork/path2`) à l'aide de la macro `mf_mkdir`, puis les associe à des `libname` (path1, path2). Il définit ensuite le même format `whichpath` dans ces deux bibliothèques, mais avec des valeurs de sortie distinctes ('path1' et 'path2' respectivement). Deux scénarios sont testés : le premier où `path1` est prioritaire dans `FMTSEARCH`, et le second où `path2` est prioritaire. Dans chaque scénario, un `DATA _NULL_` step est utilisé pour appliquer le format à la valeur 0 et stocker le résultat dans une macro-variable (`test1` ou `test2`). La macro `mp_assert` est appelée pour vérifier que le format correct (celui de la bibliothèque prioritaire) a été appliqué. La macro `mp_getformats` est ensuite exécutée pour extraire les détails du format `WHICHPATH` dans des jeux de données de sortie (`detail1` ou `detail2`), et les résultats (notamment l'étiquette associée à 'OTHER') sont à nouveau vérifiés avec `mp_assert` pour s'assurer que les informations détaillées correspondent à la version du format trouvée.
Analyse des données

Type : CREATION_INTERNE


Les données principales traitées par ce script (les formats SAS nommés `whichpath`) sont créées et définies directement dans le script via `PROC FORMAT`. Aucune donnée externe ou issue de bibliothèques SAS standards n'est utilisée comme entrée pour le processus de test des formats. Des jeux de données temporaires sont créés par les macros `mp_getformats` (`sum`, `detail1`, `detail2`) et `mp_assert` (`work.test_results`) pour stocker les résultats des tests et l'information détaillée des formats.

1 Bloc de code
Appel Macro
Explication :
Ces lignes appellent la macro `mf_mkdir` pour créer deux répertoires temporaires : `path1` et `path2` au sein de l'emplacement défini par la macro-variable `&sasjswork`. Ces répertoires serviront de bibliothèques pour stocker les formats SAS.
Copié !
1%mf_mkdir(&sasjswork/path1)
2%mf_mkdir(&sasjswork/path2)
2 Bloc de code
Libname
Explication :
Deux bibliothèques SAS, `path1` et `path2`, sont définies et associées respectivement aux répertoires physiques `&sasjswork/path1` et `&sasjswork/path2` créés précédemment. Ces bibliothèques seront utilisées pour enregistrer et rechercher des formats SAS.
Copié !
1LIBNAME path1 "&sasjswork/path1";
2LIBNAME path2 "&sasjswork/path2";
3 
3 Bloc de code
PROC FORMAT Data
Explication :
Ce bloc définit un format SAS nommé `whichpath` dans chacune des deux bibliothèques `path1` et `path2`. Chaque définition attribue la valeur '0' à une étiquette spécifique ('path1' ou 'path2') et une étiquette générique ('big fat problem if not path1/path2') à toutes les autres valeurs. Cela permet de tester quelle version du format est utilisée en fonction de la configuration de `FMTSEARCH`.
Copié !
1PROC FORMAT library=path1;
2 value whichpath 0 = 'path1' other='big fat problem if not path1';
3PROC FORMAT library=path2;
4 value whichpath 0 = 'path2' other='big fat problem if not path2';
5RUN;
4 Bloc de code
Options / DATA STEP / Appel Macro
Explication :
Ce bloc configure le premier scénario de test. L'option `FMTSEARCH` est définie pour rechercher les formats d'abord dans `path1`, puis dans `path2`. Un `DATA _NULL_` step est utilisé pour appliquer le format `whichpath` à la valeur `0` et stocker le résultat dans la macro-variable `test1`. La macro `mp_assert` vérifie que la valeur attendue est 'path1'. Ensuite, la macro `mp_getformats` est appelée pour extraire les détails du format `WHICHPATH` dans le jeu de données `detail1`. Un second `DATA _NULL_` step lit ce jeu de données pour récupérer l'étiquette associée à '**OTHER**' et la stocke dans `tst1`. Une dernière `mp_assert` valide que cette étiquette correspond à celle définie dans `path1`.
Copié !
1options insert=(fmtsearch=(path1 path2));
2DATA _null_;
3 test=0;
4 call symputx('test1',put(test,whichpath.));
5RUN;
6%mp_assert(
7 iftrue=("&test1"="path1"),
8 desc=Check correct FORMAT is applied,
9 outds=work.test_results
10)
11%mp_getformats(fmtlist=WHICHPATH,outsummary=sum,outdetail=detail1)
12%let tst1=0;
13DATA _null_;
14 SET detail1;
15 IF fmtname='WHICHPATH' and start='**OTHER**' THEN call symputx('tst1',label);
16 putlog (_all_)(=);
17RUN;
18%mp_assert(
19 iftrue=("&tst1"="big fat problem if not path1"),
20 desc=Check correct detail results are applied,
21 outds=work.test_results
22)
5 Bloc de code
Options / DATA STEP / Appel Macro
Explication :
Ce bloc exécute le second scénario de test, similaire au précédent, mais avec un ordre inversé pour `FMTSEARCH` (`path2` puis `path1`). Les mêmes étapes de vérification sont effectuées : application du format dans un `DATA _NULL_` step, validation du résultat avec `mp_assert` pour s'assurer que la valeur est cette fois 'path2'. Ensuite, `mp_getformats` extrait les détails du format dans `detail2`, et une `mp_assert` finale vérifie que l'étiquette de '**OTHER**' correspond à celle définie dans `path2`.
Copié !
1options insert=(fmtsearch=(path2 path1));
2DATA _null_;
3 test=0;
4 call symputx('test2',put(test,whichpath.));
5RUN;
6%mp_assert(
7 iftrue=("&test2"="path2"),
8 desc=Check correct FORMAT is applied,
9 outds=work.test_results
10)
11%mp_getformats(fmtlist=WHICHPATH,outsummary=sum,outdetail=detail2)
12%let tst2=0;
13DATA _null_;
14 SET detail2;
15 IF fmtname='WHICHPATH' and start='**OTHER**' THEN call symputx('tst2',label);
16 putlog (_all_)(=);
17RUN;
18%mp_assert(
19 iftrue=("&tst2"="big fat problem if not path2"),
20 desc=Check correct detail results are applied,
21 outds=work.test_results
22)
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.
Informations de Copyright : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de This file is part of SASUnit, the Unit testing framework for SAS(R) programs. For copyright information and terms of usage under the GNU Lesser General Public License see included file README.md or https://github.com/HMS-Analytical-Software/SASUnit/wiki/readme/.