h1

Créer une variable numérique à partir d’une variable caractère (fonctin INPUT avec point d’interrogation)

octobre 17, 2009

Ce sujet a été réécrit sur programmeur-pro.com. Consultez la section 4 intitulée « La question » de l’article « Convertir une variable caractère en numérique et inversement« .

Vous avez des nombres et du texte sauvegardés dans une variable caractère dans une table sAS et vous voulez sauvegarder les données numériques dans une variable numérique sans avoir dans la log une indication d’erreur (_ERROR_=1) pour les valeurs non compatibles. Comment adapter la fonction INPUT ?

1. Les données pour l’exemple

Pour l’exemple,  nous avons un dataset appelé CHAR avec une variable caractère, X_CHAR et 5 observations.

data char;
length x_char $10;
input x_char $ 1-10;
datalines;
-1.3
– 5
5.3.2
18.9
AB
;
run;

2. Le résultat attendu

Nous voudrons que la première et la quatrième observation soient converties en nombre. En effet,les trois autres valeurs ne sont pas convertibles.

  • La seconde observations est non valide à cause de l’espace séparant le signe moins et le nombre 5.
  • La troisième observation a plus d’un point
  • La dernière observation est un texte.

3. La version traditionnelle

La fonction INPUT permet de passer d’une variable caractère à une variable numérique. Elle est composée de deux paramètres : le nom de la variable caractère à convertir (ou une valeur entre guillemets) et l’informat qui permet d’interpréter les valeurs de la variable.

data char_num;
set char;
x_num=input(x_char,20.6);
run;

Malheureusement, SAS n’est pas totalement satisfait de cette action pour les valeurs ne répondant pas aux critères de l’informat.

input_withoutquestionmark

4. Une log propre grâce au point d’interrogation

Le double point d’interrogation précédent le nom de l’informat empêchera la log d’avoir la note. Bien sûr, cela n’a d’intérêt que si vous avez de bonnes raisons d’ignorer ce message d’erreur. Le cas contraire, vérifiez vos données.

data char_num;
set char;
x_num=input(x_char,??20.6);
run;

Note : si la fonction INPUT est utilisée dans l’option de data set WHERE, un WARNING apparaît.

data char_num ;
set char (where=(input(x_char,20.6)=18.9));
run;

input_warning

Ce warning ne peut être enlevé avec le point d’interrogation. Il crée même une erreur dans la log.

input_error

Lecture complémentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :