IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

Conversion alphanumérique en numérique


Sujet :

SAS Base

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 41
    Points
    41
    Par défaut Conversion alphanumérique en numérique
    Bonjour,
    je cherche à convertir certaines variables d'alphanumérique à numérique ! le problème est que pour qq variables j'ai des modalités "NSP', 'Non disponible', 'Missing Data'.

    Ma question : Existe t-il un codage particulier qui pourrait me permettre de garder l'information lorsque je transforme les variables ?
    je crois savoir qu'il existe un codage .A, .N ou .D mais je ne trouve rien la-dessus sur le net !

    Merci à vous !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Pour transformer une variable caractère en numérique, il faut passer par la fonction INPUT en spécifiant l'INFORMAT de la variable (4. dans l'exemple) :
    En cas d'erreur (cas de 'NSP' par exemple), le résultat de la fonction INPUT sera la valeur MISSING numérique (Généralement représentée par le caractère '.').

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data test ;
       input mavar $ ;
       cards ;
    123
    NSP
    456
    ;
    run ;
    data test_num ;
       set test ;
       mavar_num=input (mavar, 3.) ;
    run ;
    Bon courage !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    Merci bien mais mon soucis est que les "NSP" ne passent pas en point lorsque je transforme la variable ! je pourrais toujours appliquer un code pour ces données style '9999' ou '8888' mais je crois qu'il existe un codage spécial !

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,
    les "NSP" ne passent pas en point
    Que veux-tu dire exactement par là ?
    Qu'obtiens-tu comme résultat ?

    Bon courage !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    Lorsque je transforme ma variable en numérique, je ne veux pas perdre l'information 'NSP'... si j'fais un input classique le 'NSP' passe en 'point'... alors que j'veux un codage spécial en numérique pour ce genre de modalités !
    j'espère être plus clair

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Effectivement tu as un problème : une variable numérique ne peut contenir que des chiffres ou la valeur manquante (symbolisée par '.') !!!
    Si tu veux retrouver à la place du point une valeur type 'NSP', il faut passer par un FORMAT d'affichage.
    Mais la valeur réelle de ta donnée sera toujours MISSING ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    DATA test ;
       input mavar $ ;
       cards ;
    123
    NSP
    456
    ;
    run ;
    proc format ;
       value myfmt
          . = 'NSP'
       ;
    run ;
    DATA test_num ;
       SET test ;
       format mavar_num myfmt. ;
       mavar_num=input (mavar, 3.) ;
    run ;
    Bon courage !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    On m'a dit qu'il existait un code style .A, .N ou .D !!
    J'vais attendre le retour de cette personne pour avoir plus d'infos du coup !!
    Merci qd même !

  8. #8
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    Effectivement,
    tu peux coder comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    data test ;
        mavar = "Non disponible" ; output ;
        mavar = "3"              ; output ;
        mavar = "NSP"            ; output ;
        mavar = "2"              ; output ;
        mavar = "Missing Data"   ; output ;
        mavar = "0"              ; output ;
        mavar = ""               ; output ;    
    run ;     
     
    DATA test_num ;
       SET test ;
            if mavar = "NSP"            then mavar_num = .n ;
       else if mavar = "Non disponible" then mavar_num = .d ;
       else if mavar = "Missing Data"   then mavar_num = .m ;
       else    mavar_num=input (mavar, 3.) ;
    run ;                                      
     
    proc freq data = test_num ;
        tables mavar 
               mavar_num 
               / missing ;
    run ;
    Ca te donnerait après un proc freq par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                                                           Cumulative    Cumulative
                     mavar_num    Frequency     Percent     Frequency      Percent
                     ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
                             .           1       14.29             1        14.29
                             D           1       14.29             2        28.57
                             M           1       14.29             3        42.86
                             N           1       14.29             4        57.14
                             0           1       14.29             5        71.43
                             2           1       14.29             6        85.71
                             3           1       14.29             7       100.00

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Bravo Rémi, je ne connaissais pas cette notation...
    Pour mémoire, je laisse le code proposé plus haut pour (ma) mémoire !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    DATA test ;
       input mavar:$14. ;
       cards ;
    0
    123
    Non-disponible
    Missing_Data
    Nsp
    .
    ;
    run ;
    DATA test_num ;
       SET test ;
       select(strip(upcase(mavar)));
          when('NON-DISPONIBLE') mavar_num= .d ;
          when('MISSING_DATA')   mavar_num= .m ;
          when('NSP')            mavar_num= .n ;
          otherwise mavar_num=input (mavar, 3.) ;
       end;
    run ;

  10. #10
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonsoir.
    Pour compléter les réponses de Rémi et de Bruno, j'ajoute qu'on peut aussi se bricoler son propre informat pour l'utiliser dans INPUT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    DATA work.test ;
       INPUT maVar :$14. ;
       CARDS ;
    0
    123
    Non-disponible
    Missing_Data
    Nsp
    .
    ;
    RUN ;
    PROC FORMAT ;
    	INVALUE import
    		"Non-disponible" = .N
    		"Missing_Data"   = .M
    		"Nsp"            = .A
    		.                = .
    		OTHER            = [BEST12.]
    	;
    RUN ;
    DATA work.test ;
    	SET work.test ;
    	maVarNum = INPUT(maVar, import.) ;
    RUN ;
    Et tant qu'on parle de valeurs manquantes, puisque tu n'en trouves pas mention sur Internet, je me dis que c'est l'occasion d'un petit rappel :
    • il y a 27 valeurs manquantes numériques distinctes en SAS : ., mais aussi .1, .B, ..., .Z
    • quand on écrit dans un test (IF ou WHERE) maVar = ., on ne teste qu'un type de valeur manquante
    • mais quand on écrit dans un WHERE maVar IS MISSING, ou dans un IF MISSING(maVar), on prend en compte les 27 genres de valeurs manquantes

    Olivier
    Bon courage.
    Olivier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VxiR2] Convertir d'alphanumérique en numérique
    Par Frank Holstein dans le forum Deski
    Réponses: 3
    Dernier message: 18/06/2009, 15h35
  2. Réponses: 3
    Dernier message: 10/10/2008, 15h04
  3. Pb de conversion texte en numérique.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/11/2007, 16h57
  4. Conversion d'un numérique en varchar
    Par Goldorak2 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/05/2006, 12h33
  5. conversion une chaine numérique en lettre
    Par nazimb dans le forum ASP
    Réponses: 1
    Dernier message: 20/11/2005, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo