Les données manquantes, vides ou non applicables sont une considération importante pour tout système de gestion de données. Cet article décrit en détail comment ActivityInfo gère les « valeurs manquantes » et comment il se compare à d'autres systèmes et langages de programmation.
Introduction
ActivityInfo, comme de nombreux systèmes de gestion de données, fonctionne exclusivement avec des valeurs « typées ». Tous les champs et toutes les expressions de formule dans ActivityInfo ont un type qui détermine l'éventail des valeurs autorisées. Un champ de quantité ne peut jamais avoir la valeur « Bob », et un champ de date n'aura jamais la valeur 42. Il en va de même pour un vecteur en R, une colonne dans une base de données relationnelle ou une variable SPSS.
Cependant, il peut y avoir de nombreuses raisons pour lesquelles une valeur peut être absente :
- Un champ peut ne pas être pertinent pour chaque enregistrement ou chaque ligne. Par exemple, il se peut que seuls les réfugiés aient un numéro d'enregistrement du HCR.
- Un champ peut ne pas être obligatoire. Tous les répondants à un questionnaire n'ont pas forcément de numéro de téléphone portable.
- Un champ peut être ajouté après le début de la collecte de données, et nous n'avons aucune information sur les sujets collectés précédemment.
- Un répondant à une enquête peut refuser de répondre à des questions spécifiques, ou peut ne pas savoir.
- Il peut y avoir une erreur lors du calcul d'une valeur, par exemple, si vous divisez un nombre par zéro, ou si vous fournissez une expression régulière non valide à
REGEXMATCH
.
Pour ces raisons, chaque type de formule d'ActivityInfo inclut une valeur spéciale « vide ». Une expression numérique, par exemple, peut être égale à n'importe quel nombre réel, ou elle peut être vide. Une expression de date peut être égale à n'importe quelle date entre 1000 et 9999 de notre ère, ou elle peut être vide.
Calculs impliquant des valeurs vides
Dans les formules d'ActivityInfo, vous pouvez tester les valeurs vides en utilisant ISBLANK
. Mais les valeurs vides peuvent aussi se retrouver dans les calculs. Par exemple, vous pourriez avoir un formulaire avec deux champs de quantité pour le décompte de COUNT_WOMEN
et COUNT_MEN
, ainsi qu'un champ calculé TOTAL
avec la formule COUNT_WOMEN + COUNT_MEN
.
Que se passe-t-il si certains enregistrements contiennent des valeurs vides pour WOMEN
, MEN
ou les deux ? C'est un choix de conception : dans Excel, les cellules vides sont traitées comme des zéros dans le contexte arithmétique. En SQL, cependant, NULL
plus n'importe quel autre nombre donne NULL
, et en R, NA
plus n'importe quel nombre donne toujours NA
.
ActivityInfo suit la convention d'Excel dans la plupart des cas, ce que nous avons jugé plus indulgent pour les utilisateurs non techniques. Ainsi, pour l'exemple ci-dessus, les résultats pourraient ressembler à ceci :
Centre de santé | WOMEN | MEN | WOMEN + MEN | ISBLANK(WOMEN + MEN) |
---|---|---|---|---|
A | 300 | 150 | 450 | FAUX |
B | 160 | 160 | FAUX | |
C | 75 | 75 | FAUX | |
D | VRAI | |||
E | 220 | 90 | 310 | FAUX |
Comme vous pouvez le voir dans le tableau ci-dessus, le champ calculé TOTAL
n'est vide que lorsque WOMEN
et MEN
sont tous les deux vides.
Chaînes de texte vides
Dans certains langages de programmation, il y a une différence entre une chaîne de texte vide (""
) et une valeur NULL
ou manquante. Par exemple, en SQL, "" IS NULL
est faux, et en R, is.na("")
est également faux.
Cette distinction peut souvent dérouter les utilisateurs sans expérience en programmation, c'est pourquoi ActivityInfo évite cette distinction : une chaîne de texte vide ""
est identique à une valeur de texte vide :
ISBLANK("") == TRUE
Lors de la collecte de données, toute saisie dans un champ de texte sera débarrassée des espaces de début et de fin. Cela signifie que si vous ne tapez que des espaces dans un champ de texte, la valeur du champ sera vide :

Les espaces de début et de fin ne sont pas supprimés des valeurs dans les formules, ce qui signifie qu'un texte contenant uniquement des espaces n'est pas considéré comme vide :
ISBLANK(" ") == FALSE