Dsl pour la question de débutant, mais je dois concaténer 4 code numerique dans un champ, et je ne connais pas la syntaxe,
J'ai essaye avec le & mais ca ne fonctionne pas.
Si quelqu'un c'est comment faire, merci d'avance.
Dsl pour la question de débutant, mais je dois concaténer 4 code numerique dans un champ, et je ne connais pas la syntaxe,
J'ai essaye avec le & mais ca ne fonctionne pas.
Si quelqu'un c'est comment faire, merci d'avance.
J'ai trouvé une solution à l'aide de la faq:
PUT(MRCBRA,$CHAR10.)!!PUT(MRCCTT,$CHAR10.)!!PUT(MRDEXC,$CHAR10.)!!PUT(MRNSIN,$CHAR10.)
Mais il me met l'erreur suivante:
ERROR: Character format $CHAR in PUT function requires a character argument.
Si quelqu'un peut me dire ce que je doit modifier.Merci
test la syntaxe suivante
PUT(MRCBRA,$10.)!!PUT(MRCCTT,$10.)!!PUT(MRDEXC,$10.)!!PUT(MRNSIN,$10.)
tes numéros sont sur combiens de positions: si plus de 10 numéros SAS te mettre un exponentiel dans la cellule voir exemle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 data t; input a; cards; 123456789 123456 ; run; data t1; set t; b=put(a,$8.); run;
Bonjour,
Pour concaténer en peut utiliser !! ou ||.
Pour convertir du numérique en caractère on peut utiliser la fonction put suivie d'un format NUMERIQUE qui va bien.
ex :
on peut également utiliser la conversion automatique sans put :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 data test; var1=123; var2=99; var3=put(var1,3.)||put(var2,2.); run;
Dans ce cas, il écrit chaque valeur de la variable sur 12 positions (car le format numérique par défaut BEST12. a une longueur de 12) en alignant à droite. Ainsi on a des espaces avant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 data test; var1=123; var2=99; var3=var1||var2; run;
Pour pallier à ça, on utilise des fonctions caractères qui supprime les espaces comme trim ou cat (en SAS v9 seulement).
Steel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 data test; var1=123; var2=99; var3=trim(left(var1))||trim(left(var2)); /* on aligne à gauche et on supprime les espaces à droite.*/ run;
C'est justement l'expression que j'ai essaye.
La je vient d'essayer celle ci:
PUT(MRCBRA,10.)!!PUT(MRCCTT,10.)!!PUT(MRDEXC,10.)!!PUT(MRNSIN,10.)
Il ne met plus d'erreur, mais il ne met plus rien dans ma colonne!
Ne pas oublier le ; à la fin ;-)
est ce que ta variable à gauche de l'égalité est bien définie en caractère ?
Ben oui,
Est ce que ca vient des longueurs que je met dans mes put?
Quand je test ton exemple ca fonctionne, mais aparemment vu que mes champs n'ont pas toujours la meme longueur ca lui pose souci.
Dans ce cas essai la conversion automatique (2ème code de mon post)
merci ca marche, c'est juste que la longueur de mon champ n'etait pas assez grande, du coup il tronque le resultat
Partager