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 :

PROC SURVEY : Tirer Plusieurs Echantillons


Sujet :

Macro

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mars 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 48
    Points : 63
    Points
    63
    Par défaut PROC SURVEY : Tirer Plusieurs Echantillons
    Bonjour tout le monde,

    J'ai petit problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %let taille=10; 
    %let nb=3; 
     
    proc surveyselect 
    	n=&taille data=B.Matable out=sortie 
    	method=srs
    	rep=&nb; 
    run;
    J'aimerai faire une boucle pour incrémenter ma macro-variable Taille de manière à ce que Taille=10 jusqu'à 100.

    Je sais qu'il faut que j'utilise la boucle %Do %to %by %end mais je n'y arrive pas à joindre les deux bouts...

    Quelqu'un peut m'aider ?

    Merci
    N'oubliez pas de cliquer sur résolu si votre problème est résolu .

  2. #2
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour

    je n'ai aucune idée de ce que tu veux faire mais pour l'incrément tu peux essayer

    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
     
    %MACRO _m;
     
    %let nb=3; 
    %DO Taille=10 %TO 100;
    proc surveyselect 
    	n=&taille DATA=B.Matable out=sortie 
    	method=srs
    	rep=&nb; 
    run;
    %END;
     
    %MEND;
     
    %_m ;
    mais tu écrase à chaque fois ta table sortie...

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mars 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 48
    Points : 63
    Points
    63
    Par défaut
    Merci jerome_pdv2 pour votre réponse!

    Mais ce n'est pas exactement ce que je voulais faire.

    Je veux tirer plusieurs échantillons et les mettre dans une même table comme quand on réalise une BOOtstrap!!!

    Sauf que moi je voudrai avoir plusieurs échantillon de taille différente, ce qui change de la méthode boostrap !

    Pour l'instant avec mon code j'arrive à tirer trois échantillon (Rep=3), de taille Taille=10 alors que je souhaiterai que la variable Taille soit incrémenter :

    Exemple : Taille=10 to 100 by 10.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %let taille=10; 
    %let nb=3; 
     
    proc surveyselect 
    	n=&taille DATA=B.Matable out=sortie 
    	method=srs
    	rep=&nb; 
    run;
    Je ne sais pas si je suis assez claire ? Merci de vos réponses
    N'oubliez pas de cliquer sur résolu si votre problème est résolu .

  4. #4
    Membre actif Avatar de tdiallo
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 118
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    Je te propose ce que modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    options mprint symbolgen;
    %let nb=3; 
    %macro bcl;
    	%do i=a %to b %by x;
    	%let taille=&i;
    proc surveyselect n=&taille DATA=B.Matable out=sortie 
    		method=srs
    	rep=&nb; 
    run;
    %end;
     
    %mend;
    %bcl;
    Bon courage !!!

  5. #5
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Je te propose ça alors


    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
     
    data table;
    do i=1 to 1000;
    char=byte(ranuni(45)*25+40);
    var=ranuni(47)*85;
    output;
    end;
    run;
     
     
    options mprint;
     
    %MACRO _m;
     
    %let nb=3; 
    %let debut=10;
    %let fin=100;
    %let inc=10;
     
    %DO Taille=&debut %TO &fin %BY &inc;
     
    proc surveyselect 
    	DATA=table n=&taille method=srs rep=&nb out=sortie_&taille. ;  
    run;
     
    DATA sortie_&taille;SET sortie_&taille;
    length idreplicate $7. ; 
    idreplicate=strip(replicate)!!"_&taille";
    RUN;
     
    DATA Sortie;
    SET 
    %IF &Taille^=&debut %THEN %DO; Sortie %END; sortie_&taille. ;
    RUN;
     
    %END;
     
    %MEND;
     
    %_m ;

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mars 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 48
    Points : 63
    Points
    63
    Par défaut
    Bonjour tdiallo et jerome_pdv2,

    Merci pour à tous les deux pour vos réponses.

    tdiallo : ton programme donne le même résultat que le mien à savoir 3 échantillons de même taille. La boucle n'a pas fonctionné.

    Une idée : Est-ce qu'on ne peut pas plutôt créer la boucle à l'extérieur de la macro et la stoker afin de pouvoir l'utiliser à l'intérieur et incrémenter du coup ma variable Taille parce que j'ai l'impression qu'à l'intérieur elle ne marche pas ?

    Jerome_pdv2 : Le tiens est celui qui se rapproche le mieux à ce que je veux faire. Si j'ai bien compris ton programme tu commences par tirer 10 échantillons de taille de 10, 20 échantillons de taille 20 ainsi de suite... et tu les concatènes à la fin pour avoir une table finale : "sortie"
    Je sais que maintenant mon problème est réglé puisqu'il ne reste qu'à prendre le premier "replicate" de chaque table.

    Mais par curiosité, il n'existerai pas un programme qui puisse réaliser le tirage de cette manière :
    - Premier tirage taille 10 et replicate=1
    - Deuxième tirage taille 20 et replicate=2
    - Troisième tirage taille 30 et replicate=3 ainsi de suite...

    Parce qu'avec ton programme si (nb=100), je vais me retrouver avec 100 tableaux créer et avec tous les "replicate" qui vont se malanger pour chaque table, je risque de m'en mêler les pinceaux.

    Merci d'avance pour vos réponses à tous les deux.
    N'oubliez pas de cliquer sur résolu si votre problème est résolu .

  7. #7
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour,

    Si j'ai bien compris ton programme tu commences par tirer 10 échantillons de taille de 10, 20 échantillons de taille 20 ainsi de suite... et tu les concatènes à la fin pour avoir une table finale : "sortie"
    non ce n'est pas exactement ça,

    le programme tire 3 échantillons de taille 10 , puis 3 échantillons de taille 20 etc...

    Le premier échantillon de taille 10 est identifié par la variable idreplicate que j'ai créé et qui vaut pour cet échantillon '1_10' , pour le deuxième elle vaut '2_10', pour le 3ème échantillon de taille 50 elle vaut '3_50' etc...
    Tous les tirages sont donc distinguables par la variable idreplicate.

    Edit : Par contre si tu compte faire de nombreux tirages avec nb et taille "grands" il faudra augmenter la taille de la variable idreplicate, j'ai mis "length idreplicate $7.;" tu peux mettre à la place "length idreplicate $15.;" pour être "au large".

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mars 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 48
    Points : 63
    Points
    63
    Par défaut
    Oui tout à fait d'accord avec toi, j'avais mis tirage aléatoire de 10 échantillons parce que moi j'avais mis nb=10 sur mon programme.

    Sinon, j'ai également vu la création de la variable Idreplicate, très astucieux, c'est d'ailleurs pour ça que j'ai dit que mon problème était réglé.

    Je te remercie beaucoup.

    Mais saches que s'il y a un moyen de tirer plusieurs échantillons sans passer par la création de tous ces tableaux, je suis preneur également pour une prochaine fois.
    N'oubliez pas de cliquer sur résolu si votre problème est résolu .

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

Discussions similaires

  1. Proc tabulate avec plusieurs niveaux
    Par m.brahim dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 09/01/2012, 15h20
  2. Proc Survey et comparaison de moyennes
    Par Eric_Verger dans le forum SAS STAT
    Réponses: 5
    Dernier message: 29/08/2011, 13h48
  3. Réponses: 7
    Dernier message: 12/05/2011, 21h31
  4. Proc ARIMA avec plusieurs parametres
    Par id301077 dans le forum SAS STAT
    Réponses: 7
    Dernier message: 11/06/2010, 08h32
  5. proc gchart sur plusieurs variables
    Par julien-isup dans le forum SAS Base
    Réponses: 0
    Dernier message: 01/09/2009, 11h28

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