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 :

Faire des Opérations sur 2 dates (i=Fin_Periode - Date()) dans un %Do %To.


Sujet :

Macro

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut Faire des Opérations sur 2 dates (i=Fin_Periode - Date()) dans un %Do %To.
    Bonjour tout le monde,

    J'ai une macro qui tourne bien.
    J'ai une boucle Do itérative que je voudrais réecrire en dynamique c'est-à-dire i sera calculé.
    Ma boucle actuelle c'est %Do i=1 %to 25
    Et je voudrais la remplacer par un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %Do i= %Eval(%sysfunc (Datepart(Fin_Periode)) - %sysfunc(Datepart(Date())) )  %To  25
    Car en réalité i = Fin_Periode - Date() avec Fin_Periode et Date(), 2 dates.
    (Fin_Periode est un paramètre de ma macro. Exple = 25APR2016)

    Ma question est la suivante:
    Comment définir/écrire i avec les fonctions %Eval et/ou %Sysfunc pour cela fonctionner dans une boucle macro
    %Do %To?

    Si quelqu'un peut m'aider ...
    Je vous remercie.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    D'après l'exemple donné, la date " Fin_Periode " est d'un format date9 et un paramètre de ta macro. Si c'est le cas pourquoi tu utilise la fonction " Datepart(Fin_Periode) " ?.
    Cette fonction permet d'extraire une date contenue dans un format "datetime" de SAS. Pour cette problématique c'est la fonction " Year " de SAS qu'il faudrait utiliser. N'est ce pas ?
    Cdt Ward

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Salut Hossward,

    D'abord Merci de t'être interessé à mon poste.
    Effectivement la fonction Datetime n'est pas adaptée !!
    Year() non plus... mais ça c'est normal vu comment j'ai posé mon problème.. j'ai pas été très clair

    Mais finalement j'ai trouvé la réponse.

    A Bientôt

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Bonjour,
    vu le faible taux de réponse par au nb de lecture de mon problème, j'en déduis que je n'ai pas été très clair dans l'exposition de ce que je voulais. Ou alors cétait tellement trop simple... Bref.

    J'ai trouvé! Donc si ça peut aider quelqu'un....

    Rappel : Je cherche à faire des opérations sur des dates en format Date9. dans une macro.
    Exemple: K = "25NOV2015"d - '04NOV2015'd

    En code simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Data _Null_;  								
    K = "25NOV2015"d - '04NOV2015'd ; 
    Put "Test.Affichage = " K ;
    Run;
    En macro (C'est ce que je voulais) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %Let K =%Eval(%Sysfunc (PutN("04NOV2015"d,Best12.)) - %Sysfunc (PutN("04NOV2015"d,Best12.)));
    %Put &K ;
    Merci.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjpur,
    Voici une version plus simple :
    Pour avoir ton code en macro, il suffit de faire précéder ton code simple par %Sysevalf comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %Let K =%Sysevalf("04NOV2015"d - "04NOV2015"d) ;
    %Put &K  ;
    Bon courage
    Ward

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Hello,
    Super HossWard
    C'est encore plus simple!!! Un GRAND MERCI.
    Je ne la connaissais pas la %SysEvalf.
    Elle me fera gagner énormement de temps. Suis sûr.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/01/2009, 12h58
  2. Faire des opérations sur index du <logic:iterate
    Par yeddoughmi dans le forum Struts 1
    Réponses: 1
    Dernier message: 14/08/2007, 11h39
  3. opération sur un bean dans une jsp
    Par spaceyoyo dans le forum Struts 1
    Réponses: 4
    Dernier message: 03/02/2007, 02h56
  4. faire des opérations sur la date courante
    Par transistor49 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/04/2006, 17h39

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