Les posteurs les plus actifs de la semaine
Eric Wajnberg
 
zezima
 
Nik
 
margotte185
 
c@ssoulet
 
Coco
 
Ayana
 


boucle à l'intérieur d'une proc sql

Voir le sujet précédent Voir le sujet suivant Aller en bas

boucle à l'intérieur d'une proc sql

Message par fbn le Jeu 19 Fév 2015 - 16:21

Bonjour,

J’aimerais savoir s’il est possible de faire une boucle à l’intérieur d’un proc sql.
Je joins ci-dessous le bout de programme concerné. Il fait appel à "nbsimul" proc sql. J’aimerais faire la même chose avec une seule étape sql qui créerait "nbsimul" variables t_&i et un proc transpose à la fin. Y a-t-il un moyen de faire ça ? Ou en tout cas d'arriver à créer une table avec "nbsimul" lignes plus directement qu'en créant "nbsimul" tables?

Merci d’avance

Code:

%macro distrib_T_H0(nbsimul);
  data stat_t_h0;set _null_;run;
     %do i = 1 %to &nbsimul;
          %if %sysfunc(mod(&i,1000))=0 %then DM "log; clear; ";
              proc sql ;
                   create table stat_t_&i as select
                   sum( col&i*ln_thetaia) as t
                   FROM simH0_t ;
              quit;
              data stat_t_h0;
                  set stat_t_h0 stat_t_&i;
              run;
              proc datasets lib=work ; delete stat_t_&i;run;quit;    
     %end;
%mend distrib_T_H0;

fbn

Nombre de messages : 12
Date d'inscription : 19/02/2015

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: boucle à l'intérieur d'une proc sql

Message par niaboc le Jeu 19 Fév 2015 - 16:34

Bonjour,

tu peux tester ça :

Code:
%macro distrib_T_H0(nbsimul);

   proc sql ;
      create table stat_t_h0 (drop=temp) as select
         "temp" as temp
         %do i = 1 %to &nbsimul;
            , sum( col&i*ln_thetaia) as t&i
         %end;
         from simH0_t ;
   quit;

   proc transpose data=stat_t_h0 out=stat_t_h0;
   run;

%mend distrib_T_H0;

Dis nous si c'est ok avec ça !

Niaboc
avatar
niaboc

Nombre de messages : 918
Age : 30
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: boucle à l'intérieur d'une proc sql

Message par fbn le Ven 20 Fév 2015 - 8:46

c'est bon, ça marche! Smile

Enfin ça rame pas mal quand j'ai beaucoup de simulations (donc beaucoup de variables dans ma table créée par la proc sql).
Du coup, à moins de trouver une autre idée, je pense tenter une approche qui mêle boucle interne et boucle externe.

En tout cas merci pour l'astuce du temp, ça parait évident après coup, mais sur le moment, je n'avais pas eu l'idée...

fbn

Nombre de messages : 12
Date d'inscription : 19/02/2015

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: boucle à l'intérieur d'une proc sql

Message par niaboc le Ven 20 Fév 2015 - 9:25

Sinon tu peux aussi faire un :

Code:
proc append data=stat_t_ base=stat_t_h0 force;
run;

à la place du :

Code:
data stat_t_h0;
    set stat_t_h0 stat_t_&i;
run;

ça va un peu plus vite.
avatar
niaboc

Nombre de messages : 918
Age : 30
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: boucle à l'intérieur d'une proc sql

Message par fbn le Ven 20 Fév 2015 - 11:31

Effectivement, ça devrait être un peu mieux avec une proc append, merci.

fbn

Nombre de messages : 12
Date d'inscription : 19/02/2015

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: boucle à l'intérieur d'une proc sql

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum