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 :

Boucle dans une étape data


Sujet :

Macro

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut Boucle dans une étape data
    Bonjour,

    Je rencontre un problème un peu bête, mais je coince vraiment....

    Globalement, je veux juste faire une boucle à l'intérieur d'un data-set, voici le code (j'ai raccourci les valeurs prises et les nombreux sql derrière pour rester lisible)

    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
    41
    42
    43
    44
    45
    46
     
    %let DateD=08/04/2009;
     
    DATA sasuser.numtie_ffm;
    format numtie 7. Partenaire $20. idn 2.;
    input numtie Partenaire idn;
    cards;
    1979800 Tata 1
    186290  Titi 2
    572441  Toto 3
    ;
    run;
     
    Proc sql noprint;
         select max(idn) into:nmax 
                from sasuser.numtie_ffm;
    Quit;  
     
    %macro boucle;
    %do i=1 %to &nmax;
     
    Data _NULL_;
    set sasuser.numtie_ffm(where=(idn=&i));
    CALL SYMPUT("numtie",COMPRESS(numtie));
    CALL SYMPUT("part",COMPRESS(Partenaire));
    RUN;
     
    %orasql(
           create table sasuser.temp_hst_etd_&numtie. as
           select a.IDFDOS,
                  a.DATETD,
                  a.IDFINTAGTPTN,
                  a.CODAGNPTN,
                  a.NUMDOSPTN,
                  a.IDFOFRCMC,
                  b.SMNCLD as SMNCLDETD
           FROM dwh.tf_hstetdoct_j a, dwh.td_tps b
           where a.CODETACTR='P' and
                trunc(a.DATETD) >= TO_DATE('&DateD','DD/MM/YYYY') and
                 a.NUMTIE in (select NUMTIE002 from dwh.td_tieptn_j
           			  	 where NUMTIE002=&Numtie)
           			  AND trunc(a.datetd)=trunc(b.jou)
           	     );
    %end;
    %mend;
    %boucle;
    Jusque là, ça va. j'ai bien au final 3 tables, distinguées par la valeur du &numtie.

    Mon soucis ensuite est simplement de rassembler ces tables dans une seule.

    je pensais donc à quelquechose comme ça :

    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
     
    %macro group;
    %do i=1 %to &nmax;
     
    Data _NULL_;
    set sasuser.numtie_ffm(where=(idn=&i));
    CALL SYMPUT("numtie",COMPRESS(numtie));
    CALL SYMPUT("part",COMPRESS(Partenaire));
    RUN;
     
    data sasuser.global_etude;
    %do i=1 %to &nmax;
     
    set sasuser.temp_hst_etd_&numtie.
    %end;
    ;
    by IDFDOS;
    RUN;
     
    %mend;
    %group;

    Mais là, ça coince...
    Ca doit être bête comme choux, mais impossible d'y arriver.

    Quelqu'un peut m'aider ?

    Merci d'avance.

    Cdt,

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 153
    Points : 76
    Points
    76
    Par défaut
    Bonjour,


    c'est un i que tu dois placer non!?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DATA sasuser.global_etude;
    %do i=1 %TO &nmax;
     
    SET sasuser.temp_hst_etd_&i.
    %end;
    ;
    BY IDFDOS;
    RUN;

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Pour respecter le code initial, je proposerais de passer par des macrovariables comme suit...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    %macro GROUP ;
       data _null_ ;
          set sasuser.numtie_ffm end=fini ;
          call symput('numtie'||compress(_n_),compress(numtie)) ;
          if fini then call symput('maxi',compress(_n_)) ;
       run ;
       DATA sasuser.global_etude ;
       SET 
          %do i = 1 %to &maxi ;
             sasuser.temp_hst_etd_&&numtie&i 
          %end ;
       ;
       RUN ; 
    %mend GROUP ;
    Bon courage !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    Bruno ta proposition marche sans problème. J'aurais vraiment dû y penser car rien de compliqué mais hier il devait y avoir manif sur la rocade de mes neurones

    Sasseur, merci également de m'avoir répondu mais sauf erreur de ma part ta proposition ne faisait qu'incrémenter la valeur de &i (soit 1, 2 ou 3) derrière la racine commune de la table (sasuser.temp_hst_etd_) alors qu'il faut rajouter la valeur du champ numtie.

    Merci à vous deux !!

Discussions similaires

  1. Condition IF dans une étape Data
    Par SASMAN dans le forum SAS Base
    Réponses: 13
    Dernier message: 12/06/2012, 23h10
  2. [DATA] Gestion des erreurs dans une étape DATA
    Par JeromeMATHIAS dans le forum SAS Base
    Réponses: 12
    Dernier message: 01/02/2012, 23h50
  3. Macro ne fonctionne pas dans une étape DATA
    Par cladoo dans le forum Macro
    Réponses: 2
    Dernier message: 07/11/2011, 09h36
  4. Réponses: 3
    Dernier message: 11/08/2008, 15h56
  5. Réponses: 1
    Dernier message: 30/05/2008, 14h52

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