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 :

Découpage table


Sujet :

Macro

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Par défaut
    Bonjour,
    Voila j'ai une étape data commandes contenant entre autre la variable mois avec des modalités de 1 à 12. Je ne sais pas comment faire pour creer une macro "découpe" qui me permet de produire les n étapes data "mois1" "mois2" ..."mois_n" se limitant chacune au mois concerné. Je ne sais pas si je suis assez clair par exemple %decoupe(3) genère 3étapes data: "Mois1" "Mois2" "Mois3" et par exemple "mois1" ne contient que les données de janvier

  2. #2
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Hello,
    Un programme non transformé en macro répondant à ta question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DATA base;
    INPUT mois X;
    CARDS;
    1 10
    1 25
    2 3 
    2 6
    3 24
    ;
    DATA mois1 mois2;
    SET base;
    IF mois = 1 THEN OUTPUT mois1;
    IF mois=2 THEN OUTPUT mois2;
    RUN;
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Par défaut
    tu as raison c'est sur voila ce que j'ai fait, dans mon raisonnement je pense qu'il faut faire une boucle à l'interieur du if mais cela ne marche pas , est-ce possible d'inculre une boucle dans un if?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %macro decoupe(n);
    DATA %do i=1 %to &n; mois&i %end; ; 
    SET base;
    %IF mois = &i %THEN OUTPUT mois&i;
    RUN;
     %mend;
     %decoupe(2);

  4. #4
    Membre Expert
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Par défaut
    oui c'est possible mais ton code fait l'affaire je pense - Si ca ne correspond pas je vais te demander de rééxpliquer...

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Par défaut
    actuellement quand je compile je retouve dans mois1 toute la table "base" et non les données de janvier ca ne découpe pas enfet

  6. #6
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Lorsque tu automatises un programme tu dois te dire qu'est ce qui change et qu'est ce qui ne change pas.
    Sachant que tu pars de ce programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DATA mois1 mois2;
    SET base;
    IF mois = 1 THEN OUTPUT mois1;
    IF mois=2 THEN OUTPUT mois2;
    RUN;
    Tu dois te dire que dois-je automatiser par macroprogramme?
    J'en vois deux :
    • mois1 mois2
    • IF mois = 1 THEN OUTPUT mois1;
      IF mois=2 THEN OUTPUT mois2;

    Tu as bien automatisé le premier avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %do i=1 %TO &n; mois&i %end;
    Tu dois faire la même chose avec l'autre!
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  7. #7
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Par défaut
    Je pensais à ca mais quand je compile ca ne marque aucune erreur mais dans mois1 je retourve toute la table base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     %macro decoupe(n);
    DATA %do i=1 %to &n; mois&i %end; ;
    SET base;
    %do i=1 %to &n;
    %IF moi = &i %THEN OUTPUT mois&i;%end;
    RUN;
    %mend;

  8. #8
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Un indice : le % faite référence au langage macro, il doit être utilisé avec parcimonie et surtout judicieusement!
    PS : je te rassure tu es très proche de la solution
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  9. #9
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Par défaut
    Merci j'ai trouvé l'erreur grâce à ton info mais je ne comprend pas pourquoi? donc le code est:
    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
    DATA base;
    INPUT mois X;
    CARDS;
    1 10
    1 25
    2 3 
    2 6
    3 24
    ;
    run;
     
    %macro decoupe(n);
    DATA %do i=1 %to &n; mois&i %end; ;
    SET base;
    %do i=1 %to &n;
    IF mois = &i THEN OUTPUT mois&i;%end;
    RUN;
    %mend;
     
    %decoupe(3);

  10. #10
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Si tu mets un %IF celui-ci est interprété par SAS comme étant du langage macro. Par conséquent il n'est donc pas interprété comme un IF de l'étape DATA!!
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

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

Discussions similaires

  1. [MySQL] Découpage de table
    Par LyX60 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/03/2009, 10h25
  2. [MySQL] Découpage d'une table en plusieurs tables
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/12/2008, 18h07
  3. performance: index ou découpage de table
    Par IsHappy dans le forum Approche théorique du décisionnel
    Réponses: 3
    Dernier message: 30/04/2008, 08h51
  4. Découpage chaine et Insertion dans table
    Par star dans le forum SQL
    Réponses: 1
    Dernier message: 09/04/2008, 12h02

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