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 ?
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
Vous devez vous connecter pour publier un commentaire.
Comme indiqué ailleurs, vous ne devez utiliser une deuxième variable. SAS ne vous laisseront pas de modifier la variable type d'une colonne directement, mais vous pouvez tricher choses en utilisant les renommer de façon similaire à ci-dessus.
La seule chose que je vais vous suggérer différentes de NEOmen de la réponse ou de la vôtre ci-dessus est à l'aide de
input
. Longueur/cession ou à l'aide de la*1
méthode sont à la fois beaux, mais ils s'appuient sur les SAS, la conversion de type automatique, qui va ajouter une note à votre journal qu'il fait ça. Vous devriez éviter des choses comme ça dans votre journal, comme ils sont en désordre et de rendre les autres que vous avez fait de l'accident.À l'aide de NEOmen de l'ensemble de données de test:
Super! Enfin.
OriginalL'auteur Joe
Une fois qu'une variable est définie numériques ou caractères, vous ne pouvez pas modifier le type de données, vous pourriez probablement utiliser la solution de contournement ci-dessous.
length x 8;
est correct, sans le.
.Ouais 🙂 ..vieille habitude meurt dur.
Merci pour votre aide, c'est apprécié !
OriginalL'auteur NEOmen
Le problème avec les solutions précédentes, c'est qu'ils ne pourront pas conserver index.
La solution suivante est préférable si l'intention est de mettre à jour la cible "en place" (bien que ce sera toujours provoquer des problèmes si la cible colonne est elle-même au sein de l'index):
alter table x
donner une autre sortie queDATA x;SET x
?data x; set x;
REMPLACERA la table. Cela signifie qu'il va détruire toutes les clés primaires / index / contraintes (à moins que vous reconstruire). La solution ci-dessus va modifier la table existante tout en conservant les contraintes. Notez que Neoman et Joe étaient à la fois prudent de créer de nouvelles tables dans chacun de leurs solutions suggérées..OriginalL'auteur Allan Bowe