Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/08/2008, 15h48   #1
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 143
Points : 31
Points : 31
Par défaut [Macro] Prendre un nombre aléatoire sur une Table.

Bonjour à tous,

Désolé de revenir là-dessus, mais je souhaiterai savoir si il exsite sans faire de macro une fonction ou une option permettant de faire un nombre aléatoire sur une table.

En fait j'ai une table (work.table1) qui fait 50 000 observations et je souhaiterai créer une autre table (work.table2) afin de prendre 1000 observations aléatoirement.

J'ai vu avec l'option Ranuni mais je pense que je m'égard!

Merci à vous.
PAULOM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 17h03   #2
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Voici un exemple d'une telle sélection : http://www.developpez.net/forums/d55...s/#post3307213
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 18h55   #3
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 42
Points : 29
Points : 29
bonjour,

Si tu veux quelque chose de vraiment aléatoire voici, SOURCE : http://www.sas.com/offices/europe/fr...tat.html#stat4

Citation:

Comment réaliser un tirage aléatoire sans remise ?

Grâce à la macro-procédure tasr:

Ses paramètres :
entree : table à fournir en entrée
sortie : table créée en sortie
nb : nombre d'observations à tirer au sort

Code :
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
 
%macro tasr(libref=,entree=,sortie=,nb=);
DATA &libref..&sortie (DROP=i j count);
  count=0;
  array obsnum(&nb) _temporary_;
  do i=1 TO &nb;
      redo:
      SELECT=ceil(ranuni(12345)*n);
      SET &libref..&entree point=SELECT nobs=n;
         do j=1 TO count; 
           IF obsnum(j)=SELECT then goto redo;
         end; 
      position=SELECT;
      count=count+1;
      obsnum(count)=SELECT; 
      output;
   end; 
   stop; 
   SET &libref..&entree;
run;
 
%mend;
 
Exemple : 
Tirage au sort de 300 observations dans une TABLE de 500 observations 
 
DATA donnees (DROP=var);
   do var=1 TO 500;
     x=round(ranuni(1251)*100);
     output;
   end;
run; 
 
%tasr(libref=work,entree=donnees,sortie=donnees2,nb=300);
alexd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 12h46   #4
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 482
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 482
Points : 2 866
Points : 2 866
Dans SAS/STAT, il y a aussi la procédure SURVEYSELECT : simple, rapide, capable d'échantillonnages stratifiés, de tirer plusieurs échantillons, avec ou sans remise...

Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2008, 11h40   #5
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Aïe ! En lisant les réponses des autres j'ai compris que je me suis trompé en citant l'exemple de SAS PROG III. Voici le bon (qui est également très beau ! ) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
DATA RESULTAT (DROP = ObsLeft SampSize);
  ObsLeft = TotObs;
  do while (SampSize > 0 AND ObsLeft > 0);
    PickIt + 1;
    IF ranuni(0) < SampSize / ObsLeft then do;
      SET SOURCE point = PickIt nobs = TotObs;
      output;
      SampSize = SampSize - 1;
    end;
    ObsLeft = ObsLeft - 1;
  end;
  stop;
run;
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h10.


 
 
 
 
Partenaires

Hébergement Web