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 :

Macro SAS: boucles de PROC's


Sujet :

Macro

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut Macro SAS: boucles de PROC's
    Hello,

    Je cherche a faire une macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %macro RunWAll(NbDay);
    %do TradDay=1 %to &NbDay;
    	%split(370+TradDay);
    proc arima data=Work.Tab_1;
    i var = Per; 
    e p=3 q=3 plot;  
    f lead=5 out = Work.Predict; 
    run;
    proc export  data = Work.Predict outfile = "C:\Data"  dbms = excel replace ;
    sheet = "Data" ; 
    run ;
    %end
    %mend RunWAll;
    la macro split marche, elle va spliter un table en plusieurs tables au nombre de lignes "370+TradDay", la premiere table est nomme Tab_1.

    La macro va executer une proc arima et export en boucle: en fait chaque fois que la boucle est incrementee, ma premiere table sera par definition plus longue, etc,...

    La macro ci dessus ne marche pas... Je cale... Une idée?

    Aussi, comment je peux nommer le fichier d'export Data suivi de la variable "TradDay" qui sera incrementee (ca m'exporte des fichiers differents donc)?

    Lameth

  2. #2
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    Bonjour,
    Quels sont les noms des tables créées par la macro split?
    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 chevronné
    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
    Points : 1 868
    Points
    1 868
    Par défaut
    Bonjour Lameth,


    A vu d'aoiel je dirais qu'a chaque étape tu écrases ta sortie dans c:data. Ton nom de feuille est le même donc ta sortie est remplacée..

    si tu veux incrémenter ta table de sortie à chaque itération, je te conseille d'utiliser une proc append par exemple.

    Une fois sorti de la boucle, utilise la proc export sur la table finale.

    Bon courage,

    Manoutz

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par fafabzh6 Voir le message
    Bonjour,
    Quels sont les noms des tables créées par la macro split?
    Tab_1 et Tab_2.
    Seule Tab_1 m'importe, celle que j'utilise comme base pour ma: proc arima DATA=Work.Tab_1

    Citation Envoyé par Manoutz Voir le message
    Bonjour Lameth,


    A vu d'aoiel je dirais qu'a chaque étape tu écrases ta sortie dans c:data. Ton nom de feuille est le même donc ta sortie est remplacée..

    si tu veux incrémenter ta table de sortie à chaque itération, je te conseille d'utiliser une proc append par exemple.

    Une fois sorti de la boucle, utilise la proc export sur la table finale.

    Bon courage,

    Manoutz
    Oui pour l'ecrasement j'ai dit plus haut "comment je peux nommer le fichier d'export Data suivi de la variable "TradDay"", autrement dit il me faudrait une syntaxe du style OUTFILE = "C:\Data" &TradDay mais je la trouve pas...

    Mais pour le test j'avais essayer avec l'ecrasement, mais j'ai aucun message d'erreur a la compilation ni a l'execution, mais aucune execution non plus...

  5. #5
    Membre chevronné
    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
    Points : 1 868
    Points
    1 868
    Par défaut
    OK dc tu veux autant d'onglets que de d'itérations (tu disais :en fait chaque fois que la boucle est incrementee, ma premiere table sera par definition plus longue, etc,...).

    pour gérer un sortie différente par onglets, il faut eefctivement utliser la proc export dans la boucle, le syntaxe sera qqc de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    proc export  DATA = Work.Predict OUTFILE = "C:\Data"  dbms = excel REPLACE ;
    sheet = "Data_%cmpres(&TradDay.)" ; 
    run ;
    dis moi si ya un soucis.

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Autant de fichiers que d'iterations car sinon Le fichier va comporter trop d'onglets et en fait apres je vais faire une Macro VBA qui va ouvrir mes fichiers un par un etc,...

  7. #7
    Membre chevronné
    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
    Points : 1 868
    Points
    1 868
    Par défaut
    Dans ce cas c'est le outfile= que tu dois modifier, pas le sheet= ...

    bon courage.

  8. #8
    Membre du Club

    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    Ce que tu veux c'est exécuter &nbday proc arima sur &nbday échantillons temporels et stocker les résultats dans &nbday. fichier excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    %macro RunWAll(NbDay);
    %do TradDay=1 %TO &NbDay;
    	%split(370+TradDay);
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %macro RunWAll(NbDay);
    %do TradDay=1 %TO &NbDay.;
    	%split(370+&TradDay.);
    Ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    proc arima DATA=Work.Tab_1;
    i var = Per; 
    e p=3 q=3 plot;  
    f lead=5 out = Work.Predict; 
    run;
    ne change pas...
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc export  DATA = Work.Predict OUTFILE = "C:\Data"  dbms = excel REPLACE ;
    sheet = "Data" ; 
    run ;
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc export  DATA = Work.Predict OUTFILE = "C:\data_&nbday."  dbms = excel REPLACE ;
    sheet = "Data" ; 
    run ;
    That's all.

    Bon courage

  9. #9
    Membre du Club

    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 53
    Points
    53
    Par défaut
    il manque peut être un %eval devant 370+&nbday.

    Je ne sais pas trop comment fonctionne ta macro %split donc teste ça si ça ne fonctionne toujours pas.

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Merci... Je savais que c'etait des erreurs stupides de syntaxe...
    J'esssaye ce tout a l'heure mais ca sent bon ;-)

Discussions similaires

  1. [PROC] Proc FCMP vs Macro SAS : Comparaison temps de calcul
    Par JeromeMATHIAS dans le forum SAS Base
    Réponses: 6
    Dernier message: 02/02/2012, 20h28
  2. Boucle macro SAS
    Par oboulot dans le forum Macro
    Réponses: 5
    Dernier message: 05/06/2011, 19h56
  3. Macro %AIDEACM suite à une PROC CORRESP sur SAS
    Par Felizzy dans le forum Macro
    Réponses: 3
    Dernier message: 19/01/2011, 19h20
  4. Boucle SAS avec une proc autoreg integrée
    Par lili_75013 dans le forum SAS STAT
    Réponses: 2
    Dernier message: 09/02/2010, 16h17
  5. Boucle dans macro SAS avec BY
    Par fafabzh6 dans le forum Macro
    Réponses: 5
    Dernier message: 17/06/2008, 12h08

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