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 :

Trier les modalités d'une variable dans une table SAS


Sujet :

SAS Base

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 167
    Points : 65
    Points
    65
    Par défaut Trier les modalités d'une variable dans une table SAS
    Bonjour,

    Voila tout est dans le titre.
    Je voudrais commander le classement des modalités d'une variable dans une table SAS.
    Je m'explique :

    J'ai une variable: VARA qui a les modalités : A,B,C;D,E,F
    J'aimerais les classer dans la table suivant l'ordre suivant : D,C,F,A,E,B.

    Merci de votre réponse

  2. #2
    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
    Sur le jeu de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data Unsorted ;              
        VARA = "A" ; output ;
        VARA = "B" ; output ;
        VARA = "C" ; output ;
        VARA = "D" ; output ;
        VARA = "E" ; output ;
        VARA = "F" ; output ;
    run ;
    Je gère l'ordre voulu via un format (plus facile à maintenir) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc format ;
        value $VARA_TRI
            "D" = "1"
            "C" = "2"
            "F" = "3"
            "A" = "4"
            "E" = "5" 
            "B" = "6" ;
    run ;

    Et voilà une méthode efficace avec SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROC SQL;
    CREATE TABLE Sorted AS SELECT * FROM Unsorted ORDER BY PUT(VARA, $VARA_TRI.);
    RUN; QUIT;
    Méthode alternative, moins optimisée, plus "old school", avec étapes data :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    data unsorted_2 ;
        set unsorted ;
        VARA_TRI = PUT(VARA, $VARA_TRI.);
    run ; 
    proc sort data = unsorted_2 out = Sorted_2 ;
        by VARA_TRI ;
    run ;
    Have fun

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    C'est une proposition à l'aide de Call symputx :
    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
    25
    26
    27
    28
    29
    30
     
    data test ;
    input VARA $ ;
    cards ;
    C
    A
    B
    D
    E
    A
    E
    F
    B
    D
    F
    C
    ; run ;  
     
    data _null_ ;
    do j='D','C','F','A','E','B' ;
    i+1 ;
    call symputx(j, i) ;	 
    end ;
    run ; 	   
     
    data test_1 ;
    set test ;
    Temp=symget(VARA) ;
    run ; 	   
    proc sort data=test_1 ; by Temp ; run ;
    Cordialement
    Ward

  4. #4
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Hello,
    Je te rajoute deux exemples :
    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
    25
    26
     
    data test ;
    input VARA $ ;
    cards ;
    C
    A
    B
    D
    E
    A
    E
    F
    B
    D
    F
    C
    ; run ;
     
    data test1;
    set test (where=(vara='D'))
       test (where=(vara='C'))
       test (where=(vara='F'))
       test (where=(vara='A'))
       test (where=(vara='E'))
       test (where=(vara='B'));
    run;
    Si t'as plusieurs modalités, je te conseil la Call execute. Elle fait bien le boulot :

    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
    25
    26
    27
    28
    29
    30
     
    data tab;
    input v $;
    cards;
    D
    C
    F
    A
    E
    B
    ;
    run;
     
    data _null_;
    set tab;
    call execute ("data _tmp"!! strip(_n_)!!"; set " !! "test (where =(vara= "!! quote(strip(v)) !! " )); "
     
    );
    run;
     
     
     
    data finale ;
    set _:;
    run;
     
    proc datasets lib=work noprint;
    delete _:;
    run;
    quit;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 167
    Points : 65
    Points
    65
    Par défaut
    Merci beaucoup pour votre aide.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 06/05/2011, 22h55
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. Réponses: 3
    Dernier message: 26/09/2008, 10h41
  4. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  5. Réponses: 1
    Dernier message: 15/02/2007, 00h24

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