Publié le :
Macro CREATION_INTERNE

Test de la macro mp_getmaxvarlengths

En attente de validation
Le script conduit deux tests principaux. Le premier utilise une table `work.class` (similaire à `sashelp.class`) pour valider le comportement de la macro sur des données standards. Le second test utilise une table `work.test2` contenant des valeurs numériques non-entières et des valeurs manquantes (`.` et `._`) pour s'assurer que la macro gère correctement ces cas spécifiques. Des macros d'assertion (telles que `%mp_assert`, `%mp_assertdsobs`, `%mp_assertscope`), probablement issues du framework de test SASUnit, sont utilisées pour automatiser la validation des résultats et s'assurer de l'absence d'erreurs ou de fuites de portée de macro-variables.
Analyse des données

Type : CREATION_INTERNE


Le script crée deux tables de travail, `work.class` et `work.test2`, en utilisant des instructions `datalines` et `cards`. Aucune donnée externe n'est lue.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc DATA STEP crée la table `work.class`. Il définit la structure de cinq variables et les remplit à partir de données intégrées directement dans le code via l'instruction `datalines4`, en utilisant le délimiteur ',' grâce à l'option DSD.
Copié !
1DATA work.class ;
2attrib
3Name LENGTH= $8
4Sex LENGTH= $1
5Age LENGTH= 8
6Height LENGTH= 8
7Weight LENGTH= 8
8;
9INFILE CARDS dsd;
10INPUT
11 Name :$char.
12 Sex :$char.
13 Age
14 Height
15 Weight
16;
17datalines4;
18Alfred,M,14,69,112.5
19Alice,F,13,56.5,84
20Barbara,F,13,65.3,98
21Carol,F,14,62.8,102.5
22Henry,M,14,63.5,102.5
23James,M,12,57.3,83
24Jane,F,12,59.8,84.5
25Janet,F,15,62.5,112.5
26Jeffrey,M,13,62.5,84
27John,M,12,59,99.5
28Joyce,F,11,51.3,50.5
29Judy,F,14,64.3,90
30Louise,F,12,56.3,77
31Mary,F,15,66.5,112
32Philip,M,16,72,150
33Robert,M,12,64.8,128
34Ronald,M,15,67,133
35Thomas,M,11,57.5,85
36William,M,15,66.5,112
37;;;;
38RUN;
2 Bloc de code
Macro Data
Explication :
Ce bloc exécute le premier scénario de test. Il appelle la macro `%mp_getmaxvarlengths` sur `work.class` pour générer `work.myds`. Il vérifie ensuite l'absence d'erreurs globales et le bon nombre de lignes en sortie. Un DATA STEP crée la table `work.errs` si des longueurs calculées sont incorrectes. Enfin, une macro d'assertion valide que cette table d'erreurs est vide.
Copié !
1/* regular usage */
2%mp_assertscope(SNAPSHOT)
3%mp_getmaxvarlengths(work.class,outds=work.myds)
4%mp_assertscope(COMPARE,desc=checking scope leakage on mp_getmaxvarlengths)
5%mp_assert(
6 iftrue=(&syscc=0),
7 desc=No errs
8)
9%mp_assertdsobs(work.myds,
10 desc=Has 5 records,
11 test=EQUALS 5
12)
13DATA work.errs;
14 SET work.myds;
15 IF name='Name' and maxlen ne 7 THEN OUTPUT;
16 IF name='Sex' and maxlen ne 1 THEN OUTPUT;
17 IF name='Age' and maxlen ne 3 THEN OUTPUT;
18 IF name='Height' and maxlen ne 8 THEN OUTPUT;
19 IF name='Weight' and maxlen ne 3 THEN OUTPUT;
20RUN;
21DATA _null_;
22 SET work.errs;
23 putlog (_all_)(=);
24RUN;
25 
26%mp_assertdsobs(work.errs,
27 desc=Err TABLE has 0 records,
28 test=EQUALS 0
29)
3 Bloc de code
DATA STEP Data
Explication :
Ce bloc DATA STEP crée une seconde table, `work.test2`, pour un cas de test plus complexe. Il inclut des variables avec des valeurs numériques non-entières et des valeurs manquantes standard (`.`) et spéciales (`._`).
Copié !
1/* test2 */
2DATA work.test2;
3 LENGTH a 3 b 5;
4 a=1/3;
5 b=1/3;
6 c=1/3;
7 d=._;
8 e=.;
9 OUTPUT;
10 OUTPUT;
11RUN;
4 Bloc de code
Macro Data
Explication :
Ce bloc exécute le second scénario de test sur la table `work.test2`. Il vérifie que `%mp_getmaxvarlengths` fonctionne correctement avec des valeurs numériques complexes et manquantes. Le processus est identique au premier test : appel de la macro, validation des résultats via des assertions et un DATA STEP de vérification, et confirmation finale que la table d'erreurs (`work.errs2`) est vide.
Copié !
1%mp_getmaxvarlengths(work.test2,outds=work.myds2)
2%mp_assert(
3 iftrue=(&syscc=0),
4 desc=No errs in second test (with nulls)
5)
6%mp_assertdsobs(work.myds2,
7 desc=Has 5 records,
8 test=EQUALS 5
9)
10DATA work.errs2;
11 SET work.myds2;
12 IF name='a' and maxlen ne 3 THEN OUTPUT;
13 IF name='b' and maxlen ne 5 THEN OUTPUT;
14 IF name='c' and maxlen ne 8 THEN OUTPUT;
15 IF name='d' and maxlen ne 3 THEN OUTPUT;
16 IF name='e' and maxlen ne 0 THEN OUTPUT;
17RUN;
18DATA _null_;
19 SET work.errs2;
20 putlog (_all_)(=);
21RUN;
22 
23%mp_assertdsobs(work.errs2,
24 desc=Err TABLE has 0 records,
25 test=EQUALS 0
26)
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.