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 09/06/2008, 10h42   #1
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
Par défaut interprêtation de la macro tirage avec remise

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 /*Table d'exemple : 100 observations */
DATA test;
  do a=100 TO 200;
    output;
  end;
run;
 
/* Tirage au sort de 20 observations dans cette table */
DATA ech1 (DROP=i);
  do i=1 TO 20; 
    SELECT=ceil(ranuni(0)*n);
    SET test point=SELECT nobs=n; 
    position=SELECT;
    output;
  end;
  stop; 
run; 
 
La v ariable position correspond à la position de l'observation dans la table de départ.
J'ai trouvé ce code pour le tirage avec remise dans la faq sas, est-ce-que quelqu'un parmis vous pourrait me l'expliquer?? ce qui me parrait un peu bizarre c'est la boucle do à l'interieur de l'étape data ?Merci
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 10h45   #2
Responsable SAS
 
Inscription : septembre 2006
Messages : 1 973
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 973
Points : 4 810
Points : 4 810
Bonjour,
Que veux-tu que l'on t'explique la macro ou le tirage avec remise?
fafabzh6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 11h07   #3
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
Citation:
Envoyé par fafabzh6 Voir le message
Bonjour,
Que veux-tu que l'on t'explique la macro ou le tirage avec remise?
Si j'ai bien compris:
le table ech est construite à partir de la table test, le pointeur se positionne sur l'un des éléments de la table "test" tiré au hasard par "ranuni"!!

ce que je ne comprend pas,
SELECT=ceil(ranuni(0)*n);

1/ Comment "n" le nombre d'observations de test est-il renseigné? aucune instruction ne le renseigne avant???

Code :
1
2
3
4
5
6
7
do i=1 TO 20; 
    SELECT=ceil(ranuni(0)*n);
    SET test point=SELECT nobs=n; 
    position=SELECT;
    output;
  end;
  stop;
2/ la boucle "Do" à l'interieur de l'étape Data??
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 11h37   #4
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
1) n est renseigné par l'instruction SET test point=SELECT nobs=n;
C'est la particularité de SAS que je n'aime pas, il exécute le code selon l'ordre qui est loin d'être évident. Dans ton exemple, il y a un étape de "pré-exécution", dans lequel SAS lit l'en-tête de la table pour savoir le nombre des lignes, l'affecte à la variable n, et uniquement après ça commence l'exécution d'étape data.
2) oui, tu as droit de faire des boucles do à l'intérieur d'une étape data. Ou j'ai mal compris la question ?
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 14h13   #5
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
Citation:
Envoyé par green_fr Voir le message
2) oui, tu as droit de faire des boucles do à l'intérieur d'une étape data. Ou j'ai mal compris la question ?
Donc sas fait une pré-exécution, c'est vrai ça m'a paru bizzare d'executer
Code :
SELECT=ceil(ranuni(0)*n);
avant de renseigner "n"

Pour la boucle DO ma question est:

Quelle est la différence entre mettre la boucle Do à l'interieur de l'étape Data ou à l'extérieur??
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 15h11   #6
Responsable SAS
 
Inscription : septembre 2006
Messages : 1 973
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 973
Points : 4 810
Points : 4 810
Bonjour,
Ici la boucle do est utilisée pour faire un tirage de 20 personnes, chaque personne tirée au sort est ensuite "imprimer " dans la table avec le output.
La boucle do dans l'étape data permet de ne créer qu'une seule table.

Si la boucle do avait été à l'extérieure de l'étape data tu aurais dû créer 20 tables et très certainement les grouper avec un set pour obtenir le résultat voulu.....
fafabzh6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 15h58   #7
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
Citation:
Envoyé par fafabzh6 Voir le message
Bonjour,
Ici la boucle do est utilisée pour faire un tirage de 20 personnes, chaque personne tirée au sort est ensuite "imprimer " dans la table avec le output.
La boucle do dans l'étape data permet de ne créer qu'une seule table.

Si la boucle do avait été à l'extérieure de l'étape data tu aurais dû créer 20 tables et très certainement les grouper avec un set pour obtenir le résultat voulu.....
merci pour les détails!!

je vais poser une autre question dans une autre discussion!
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h18.


 
 
 
 
Partenaires

Hébergement Web