Variables non initialisées : Sécurisez votre code SAS avec l'option VARINITCHK

Niveau de difficulté
Débutant
Publié le :
Michael

Le Conseil de l'Expert

Michael
Responsable de l'infrastructure Viya.

Prenez l'habitude de lire le journal (Log) dès la phase de compilation. Une erreur sémantique indique souvent une confusion dans la structure de vos données ou dans la portée de vos variables. Utiliser VARINITCHK=ERROR en phase de développement est le meilleur moyen de devenir un programmeur plus rigoureux.

Cette documentation décrit les erreurs sémantiques dans SAS©. Ces erreurs sont liées à l'utilisation incorrecte d'éléments de syntaxe, même si la syntaxe elle-même est valide. Des exemples incluent un nombre incorrect d'arguments pour une fonction, l'utilisation d'un type de variable inapproprié (numérique pour caractère), des références invalides à un tableau, ou l'utilisation d'une variable non initialisée. SAS© détecte ces erreurs à la compilation. Si la variable n'est pas initialisée, un avertissement est émis par défaut, mais peut être configuré pour générer une erreur bloquante via l'option système VARINITCHK=ERROR.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou des librairies non assignées pour démontrer les erreurs.

1 Bloc de code
DATA STEP
Explication :
Cet exemple tente d'assigner une valeur scalaire (3) à un tableau entier ('all'), ce qui est une référence invalide pour un tableau SAS. L'erreur est détectée à la compilation, indiquant 'invalid reference to the array all'.
Copié !
1DATA _null_;
2 array all{*} x1-x5;
3 all=3;
4 DATALINES;
51 1.5
6. 3
72 4.5
83 2 7
93 . .
10;
11 
12RUN;
2 Bloc de code
DATA STEP
Explication :
Dans cet exemple, le programme tente d'accéder à une table 'old' via la librairie 'somelib'. Cependant, 'somelib' n'a pas été préalablement définie avec une instruction LIBNAME. SAS génère une erreur indiquant que 'Libname SomeLib is not assigned' car la référence sémantique est incorrecte.
Copié !
1DATA test;
2 SET somelib.old;
3RUN;
L'Astuce Pro
Pour corriger l'erreur sémantique liée à l'affectation massive sur un tableau, vous devez impérativement utiliser une boucle do ou l'instruction conditionnelle appropriée, car SAS ne permet pas d'affecter une valeur scalaire à l'ensemble des éléments d'un array via une simple égalité, contrairement à certains langages matriciels.
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 © SAS Institute Inc. All Rights Reserved