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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyse données médicales
    Inscrit en
    février 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Analyse données médicales
    Secteur : Santé

    Informations forums :
    Inscription : février 2018
    Messages : 30
    Points : 14
    Points
    14

    Par défaut Sélection aléatoire de N observations selon critères en cascade (dans une boucle ?)

    Bonjour,

    Dans une table qui contient des individus (cf. PJ) ayant certains critères, je dois tirer 5 individus au sort (N individus selon la présence ou non de critères)

    Un individu doit toujours avoir le critère 1 le plus élevé (si pas 10, 9, sinon 8...) et le critère 2 : 2 séjours au sort maximum. Si 1 ou zéro,
    on passe à la même sélection avec le critère 2 : 2 séjours au sort maximum. Si 1 ou zéro, critère 3 etc. en cascade jusqu'à obtenir 5 individu et épuisement des critères disponibles.

    Et dans l'hypothèse maximale où aucun individu n'est trouvé avec les premiers critères, on en tire 5 à critère 1 = 0. On descend donc dans les critères jusqu'à trouver 5 individus.

    Une boucle complexe doit être la solution mais je ne vois pas comment l'écrire. J'espère avoir été clair. N'hésitez pas à me demander plus de précisions si nécessaire.

    Merci d'avance pour votre aide.
    Images attachées Images attachées  

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    janvier 2013
    Messages
    447
    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 : 447
    Points : 1 479
    Points
    1 479

    Par défaut

    Bonjour,
    Quel est le résultat attendu de l'exemple en pièce jointe. "Les individus qui doivent être sélectionnés selon les critères en cascade".

    Merci
    Ward

  3. #3
    Membre à l'essai
    Homme Profil pro
    Analyse données médicales
    Inscrit en
    février 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Analyse données médicales
    Secteur : Santé

    Informations forums :
    Inscription : février 2018
    Messages : 30
    Points : 14
    Points
    14

    Par défaut

    Citation Envoyé par hossward Voir le message
    Bonjour,
    Quel est le résultat attendu de l'exemple en pièce jointe. "Les individus qui doivent être sélectionnés selon les critères en cascade".

    Merci
    Ward
    Bonjour Ward,

    5 au total;
    au maximum 2 critères 2 (avec le critère 1 le plus élevé possible) mais il peut y en avoir qu'un ou zéro. Dans ce cas on se reporte sur le crit3 (toujours avec crit 1 le plus élevé)
    au maximum 2 critères 3 (avec le critère 1 le plus élevé possible) mais il peut y en avoir qu'un ou zéro. Dans ce cas on se reporte sur le crit3 (toujours avec crit 1 le plus élevé)
    au mieux 1 crit4 (si 2 crit2 et 2 crit3) sinon, la différence ce qui n'a pas été trouvé en crit 2 et 3 (et toujours avec crit1 le plus élevé possible).

    C'est pas simple, j'en ai bien conscience !

    Merci d'avance

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    janvier 2013
    Messages
    447
    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 : 447
    Points : 1 479
    Points
    1 479

    Par défaut

    Citation Envoyé par vnr66 Voir le message
    Bonjour Ward,

    5 au total;
    au maximum 2 critères 2 (avec le critère 1 le plus élevé possible) mais il peut y en avoir qu'un ou zéro. Dans ce cas on se reporte sur le crit3 (toujours avec crit 1 le plus élevé)
    au maximum 2 critères 3 (avec le critère 1 le plus élevé possible) mais il peut y en avoir qu'un ou zéro. Dans ce cas on se reporte sur le crit3 (toujours avec crit 1 le plus élevé)
    au mieux 1 crit4 (si 2 crit2 et 2 crit3) sinon, la différence ce qui n'a pas été trouvé en crit 2 et 3 (et toujours avec crit1 le plus élevé possible).

    C'est pas simple, j'en ai bien conscience !

    Merci d'avance
    Bonjour,
    Je te propose une solution correspondant à la description ci-dessus et qui donne la combinaison suivante : Individus={1, 5, 2, 6, 8} dans l'ordre de tri.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    data Test ;
    input id Crit1 crit2$ Crit3$ Crit4$ ;
    cards ;
    1  10 oui non oui
    2  9  non oui non
    3  8  non non non
    4  7  non non non
    5  6  oui oui oui
    6  5  oui oui non
    7  4  oui non non
    8  3  non oui oui
    9  2  non oui non
    10 1  non non non
    11 0  oui non non
    ; run ; 
     
    data selects (keep=Individus);
    do until(fin) ;
    set Test end=fin ; 
    /*------------------*/
    array _2crit[6]  ; 
    array _3crit[11] ;
    array _4crit[11] ;
    /*------------------*/
    if crit2='oui' and cnt2 <=1 then do ; cnt2+1 ; _2crit(cnt2)=id ; end ;
    if crit3='oui'              then do ; cnt3+1 ; _3crit(cnt3)=id ; end ;
    if crit4='oui'              then do ; cnt4+1 ; _4crit(cnt4)=id ; end ;
    end ;	 
    /*------------------*/
    do until(fin) ;
    set Test end=fin ; 
    do m=1 to dim(_3crit) ; 	
    	do n=m to dim(_2crit) ; 
    		if _3crit(m) = _2crit(n) then call missing( _3crit(m)) ;  
    		if _4crit(m) = _2crit(n) then call missing( _4crit(m)) ;  
     	end ;
    end ;  
    /*------------------*/
    do p=1 to dim(_3crit) ; 	
    if not missing(_3crit(p)) and cnt <=1 then do ; cnt2+1 ; cnt+1 ; _2crit(cnt2)=_3crit(p) ; end ; 
    if not missing(_4crit(p)) and knt <=1 then do ; cnt2+1 ; knt+1 ; _2crit(cnt2)=_4crit(p) ; end ; 
    end ;  
     
    end ;
    /*------------------*/
    do q=1 to dim(_2crit) ;
    Individus=_2crit(q) ; output ;	  
    end ; 	 
    run ;
    Cordialement
    Ward

  5. #5
    Membre à l'essai
    Homme Profil pro
    Analyse données médicales
    Inscrit en
    février 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Analyse données médicales
    Secteur : Santé

    Informations forums :
    Inscription : février 2018
    Messages : 30
    Points : 14
    Points
    14

    Par défaut

    Super, merci ! Je vais regarder tout ça.

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

Discussions similaires

  1. [XL-2010] Copier plage de cellules vers une autre feuille selon un critère dans une boucle
    Par klash384 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/01/2015, 17h53
  2. [XL-2010] Sélection et écriture de données selon critère
    Par Wishguu dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/02/2014, 10h28
  3. Critère ET / OU dans une requête
    Par Nessie37 dans le forum IHM
    Réponses: 8
    Dernier message: 25/07/2007, 16h26
  4. Réponses: 6
    Dernier message: 07/05/2007, 09h01
  5. Réponses: 2
    Dernier message: 07/07/2006, 10h00

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