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 STAT Discussion :

Tirage de nombre selon une loi uniforme sans remise


Sujet :

SAS STAT

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Tirage de nombre selon une loi uniforme sans remise
    Bonjour,

    je cherche comment réaliser un tirage aléatoire de nombre selon une loi uniforme sans remise. Pour faire simple, disons que j'ai une table avec x lignes et pour chaque ligne une valeur min et une valeur max. ex :

    table =

    id min max
    1 1 10
    2 1 15
    3 1 8 ...

    J'aimerais pour chaque ligne tirer 3 chiffres DIFFERENTS compris entre le min et max de la ligne. Avec la fonction ranuni j'y arrive mais il peut me tirer plusieurs fois le meme chiffre pour une ligne donnée. J'utilise le code ci-dessous :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data tirage (drop=i);
    set table;
       do i=1 to 3;
         tirage=int(ranuni(45123)*max)+1;
         output;
       end;
     run;
    qui marche très bien, cela me duplique mes lignes 3 fois avec un chiffre compris entre 1 et le max mais il n'est pas sans remise.

    Je n'ai rien trouver sur internet pour faire cela...

    Merci de votre aide !

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Une solution en remodelant legerement le dataset en sortie:

    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
    data table;
    input id min max 3.;
    cards;
    1 1 10
    2 1 15
    3 1 8
    ;
    run;
     
     
     
    data tirage ;
    set table;
    tirage1=-999;
    tirage2=-999;
    tirage3=-999;
    do until (tirage1 ne tirage2 and  tirage1 ne tirage3 and  tirage2 ne tirage3) ;
    tirage1=int(ranuni(-3)*(max-min))+min;
    tirage2=int(ranuni(-3)*(max-min))+min;
    tirage3=int(ranuni(-3)*(max-min))+min;
    end;
    run;

  3. #3
    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
    Je proposerais une solution en 2 temps ; d'abord la démultiplication de la table (une ligne = une combinaison id x nombre) puis un tirage aléatoire sans remise avec la proc Surveyselect (avec un STRATA id et un SAMPSIZE=3).
    La démultiplication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DATA mult ;
      SET table ;
      DO i=min TO max ;
        OUTPUT ;
      END ;
    RUN ;
    Le tirage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROC SURVEYSELECT DATA=mult OUT=ech SAMPSIZE=3 SEED=1 NOPRINT ;
      STRATA id ;
    RUN ;
    Bon courage.
    Olivier

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/12/2011, 21h58
  2. Passer d'une loi Uniforme à une loi Normale
    Par chloe28 dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/05/2011, 00h16
  3. changement de l'intervalle pour une loi uniforme
    Par djocin dans le forum Fortran
    Réponses: 3
    Dernier message: 22/06/2009, 16h28
  4. Réponses: 17
    Dernier message: 06/09/2006, 15h23
  5. Réponses: 2
    Dernier message: 16/05/2006, 17h02

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