SAS : Convertir les caractères numériques, sans créer une autre variable

Je veux convertir x numérique.

DATA test;
  input x $1.;
  cards;
  1
  2
  0
  ;
run;

J'ai essayé différentes manières :

  • Avec *1 :

    /* trial1 */
    DATA test1;
      SET test;
      x = x*1;
    run;
    

Le journal imprime la note suivante :

NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
      2470:3
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
      2470:4

Et le format ne change pas.

  • Avec input() :

    /* trial2 */
    DATA test2;
      SET test;
      x = input(x,BEST1.);
    run;`
    

Le journal imprime la note suivante :

NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
  2396:3

Et le format ne change pas.

  • Avec informat :

    /* trial3 */
    DATA test3;
      SET test;
      informat x BEST1.;
    run;
    

Le journal imprime le message d'erreur suivant :

ERROR 48-59: The informat $BEST was not found or could not be loaded.

Qui est expliqué ici et ici : le compilateur détecte les différents types de variables et de format, suppose que c'est une erreur, ajouter le présumé manquants $ et, par conséquent, ne trouve pas le format.

Tous ces essais si j'ai créé un deuxième variable, comme par exemple :

DATA test4;
  SET test (rename=(x=x2));
  x = x2*1;
  drop x2;
run;

Mais je suis en train de nettoyer mon code et je me demande si il existe un moyen de faire une telle conversion sans le faire ?

Une variable ne peut pas avoir son type est défini comme personnage et numérique dans les mêmes données de l'étape. Si x ne contient que des valeurs numériques, puis le définir comme un numérique lors de la première utilisation.
Je suis d'accord à la base de données pourrait avoir été construit de façon plus intelligente. Mais tout est à gauche pour moi, c'est à les utiliser du mieux que je peux, je ne peux pas écrire sur elle. J'espérais un équivalent dans le SAS de R : x<-as.numeric(x)
R est en train de faire exactement la même chose que SAS (dans NEOmen de la solution ou de la vôtre ci-dessus - les deux ont quelques défauts mineurs, mais le concept est le même). Ce n'est pas de changer le type de x, c'est la création d'un tout nouveau x, qui remplace l'ancienne x. SAS est juste un peu plus formelle avec la façon dont vous devez le faire (ce qui est beaucoup plus sûr).

OriginalL'auteur Vincent | 2014-12-29