Précédent   Forum du club des développeurs et IT Pro > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/12/2012, 16h27   #1
idhmida
Invité régulier
 
Inscription : mai 2012
Messages : 32
Détails du profil
Informations forums :
Inscription : mai 2012
Messages : 32
Points : 6
Points : 6
Par défaut Format date pour une macro variable

Bonjour,

J'ai un petit souci de format date et souhaiterais vous demander de l'aide svp.
Je souhaite formatter une macro variable en format ddmmyy10., mais la ligne de code suivante ne fonctionne pas et je ne comprends pas le problème.
Code :
1
2
3
4
5
 
%let aamm = 201209;
%let aa = %sysfunc(substr(&aamm.,1,4));
%let mois = %sysfunc(substr(&aamm.,5,2));
%let dtfin = %sysfunc(InputN(mdy(%eval(&mois.+1),01,&aa.),ddmmyy10.));
La macro variable &dtfin. ne prend pas le format ddmmyy10. que je souhaite avoir, et je ne suis pas sur l'utilisation de la fonction inputN, pouvez vous m'aider sur le problème svp.

Merci d'avance
Lily
idhmida est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 16h37   #2
s_a_m
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 310
Points : 2 537
Points : 2 537
Hello;
pour afficher 10/01/2012, moi j'aurai fais:

Code :
1
2
 
%let dtfin = %eval(&mois.+1)/01/&aa.;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 17h51   #3
edward carnby
Membre éprouvé
 
Homme Ludovic Le Breton
Statisticien/développeur BI
Inscription : janvier 2012
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Le Breton
Âge : 38
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Statisticien/développeur BI
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 177
Points : 464
Points : 464
Bonjour,

tu peux faire (pour gérer les mois 12 et compagnie ...)

Code :
1
2
3
4
5
 
%let aamm = 201209;
%let dtdeb=%sysfunc(mdy(%sysfunc(substr(&aamm.,5,2)),01,%sysfunc(substr(&aamm.,1,4))));
%let dtfin=%sysfunc(intnx(month,&dtdeb,1));
%let dtfin_char = %sysfunc(putN(&dtfin,ddmmyy10.));
résultats :

Code :
1
2
3
 
%put aa = &aa  -  mois = &mois  -  dtdeb = &dtdeb  -  dtfin = &dtfin  -  dtfin_char = &dtfin_char;
aa = 2012  -  mois = 09  -  dtdeb = 19237  -  dtfin = 19267  -  dtfin_char = 01/10/2012
edward carnby est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 18h10   #4
idhmida
Invité régulier
 
Inscription : mai 2012
Messages : 32
Détails du profil
Informations forums :
Inscription : mai 2012
Messages : 32
Points : 6
Points : 6
Bonjour à vous edward et sam,

Je vous remercie pour vos réponses respectives, je voudrais quand même savoir pourquoi ma synthaxe n'a pas fonctionné? i.e pourquoi on ne pourrait pas affecter le format ddmmyy10. directement à l'intérieur de %sysfunc, c'est pourtant ce que j'ai cru comprendre...

Merci encore!!
idhmida est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 18h48   #5
edward carnby
Membre éprouvé
 
Homme Ludovic Le Breton
Statisticien/développeur BI
Inscription : janvier 2012
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Le Breton
Âge : 38
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Statisticien/développeur BI
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 177
Points : 464
Points : 464
1 - tu dois utiliser un %sysfunc devant ta fonction MDY.
2 - la fonction mdy va te retourner une valeur numérique, et donc, tu doit utiliser un putN au lieu d'un inputN

Code :
%let dtfin = %sysfunc(putN(%sysfunc(mdy(%eval(&mois.+1),01,&aa.)),ddmmyy10.));
edward carnby est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 18h58   #6
idhmida
Invité régulier
 
Inscription : mai 2012
Messages : 32
Détails du profil
Informations forums :
Inscription : mai 2012
Messages : 32
Points : 6
Points : 6
Citation:
Envoyé par edward carnby Voir le message
1 - tu dois utiliser un %sysfunc devant ta fonction MDY.
2 - la fonction mdy va te retourner une valeur numérique, et donc, tu doit utiliser un putN au lieu d'un inputN

Code :
%let dtfin = %sysfunc(putN(%sysfunc(mdy(%eval(&mois.+1),01,&aa.)),ddmmyy10.));
Merci beaucoup edward!!
idhmida est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h22.


 
 
 
 
Partenaires

Hébergement Web