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

Macro Discussion :

selection de 2-uplet dans une boucle imbriquée


Sujet :

Macro

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 103
    Points : 54
    Points
    54
    Par défaut selection de 2-uplet dans une boucle imbriquée
    Bonjour,

    j'ai la table suivante, tel que var2 représente une différence entre deux quantités :
    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
     
    var1 var2 var3 
    id1 p1-p2  0.2
    id1 p1-p3  0.8
    id1 p1-p4  0.5
    id1 p2-p1  0.2
    id1 p2-p3  0.7
    id1 p2-p4  0.12
    id1 p3-p1  0.8
    id1 p3-p2  0.7
    id1 p3-p4  0.9
    id1 p4-p1  0.2
    id1 p4-p2  0.12
    id1 p4-p3  0.9
     
    ......

    puisque p1-p2=p2-p1 et ..., je voudrais obtenir les paires distinctes de var2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var1 var2 var3 
    id1 p1-p2  0.2
    id1 p1-p3  0.8
    id1 p1-p4  0.5
    id1 p2-p3  0.7
    id1 p2-p4  0.12
    id1 p3-p4  0.9
    ......
    j'ai essayé dans un premier temps de créer 2 variables pi et pj
    qui ont respectivement le premier et le second terme de la différence pi-pj et j'ai testé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    proc sql;
    create table data as
    select var1, var2, var3, pi,pj
    from table
    where pi,pj ne (select pj,pi from table) ;quit;
    mais je crois que ça ne passe pas avec sql !!


    comment pourrais-je faire?!

    si quelqu'un pourrait m'aider ça serait sympa !!

    Merci

  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
    Si les valeurs Pi sont ordonnées (et elle le sont forcément, ne serait ce que par ordre "alphabétique"), et si tu est sûr d'avoir toujours les deux couples "Pi-Pj" et "Pj-Pi",
    Alors tu peux dans une étape date (ou sql) faire une condition de sélection des observations : si "Pi<Pj" alors tu gardes, sinon tu écartes.

    Exemple :
    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 ;
    input  var1 $ var2 $ var3 ;
    cards; 
    id1 p1-p2  0.2
    id1 p1-p3  0.8
    id1 p1-p4  0.5
    id1 p2-p1  0.2
    id1 p2-p3  0.7
    id1 p2-p4  0.12
    id1 p3-p1  0.8
    id1 p3-p2  0.7
    id1 p3-p4  0.9
    id1 p4-p1  0.2
    id1 p4-p2  0.12
    id1 p4-p3  0.9
    ;
    run ;
    data test2 ;
        set test ;
        pfirst = scan(var2,1,'-') ;
        plast  = scan(var2,2,'-') ;
        if pfirst < plast then output ; 
    run ;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 103
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par RemiBousquet Voir le message
    Si les valeurs Pi sont ordonnées (et elle le sont forcément, ne serait ce que par ordre "alphabétique"), et si tu est sûr d'avoir toujours les deux couples "Pi-Pj" et "Pj-Pi",
    Alors tu peux dans une étape date (ou sql) faire une condition de sélection des observations : si "Pi<Pj" alors tu gardes, sinon tu écartes.

    Exemple :
    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 ;
    input  var1 $ var2 $ var3 ;
    cards; 
    id1 p1-p2  0.2
    id1 p1-p3  0.8
    id1 p1-p4  0.5
    id1 p2-p1  0.2
    id1 p2-p3  0.7
    id1 p2-p4  0.12
    id1 p3-p1  0.8
    id1 p3-p2  0.7
    id1 p3-p4  0.9
    id1 p4-p1  0.2
    id1 p4-p2  0.12
    id1 p4-p3  0.9
    ;
    run ;
    data test2 ;
        set test ;
        pfirst = scan(var2,1,'-') ;
        plast  = scan(var2,2,'-') ;
        if pfirst < plast then output ; 
    run ;

    C'est Super!! Merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/01/2013, 17h51
  2. [MySQL] Select sur 2 tables dans une boucle?
    Par morgan47 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/11/2011, 09h41
  3. selection d'une plage dans une boucle
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/01/2009, 16h55
  4. test avant d'entrer dans une boucle For each cell in selection
    Par totoro02 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/01/2009, 09h27
  5. [Performance] LEFT JOIN vs SELECT dans une boucle (PHP)
    Par frochard dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/10/2005, 17h45

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