1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur Statistiques
    Inscrit en
    octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Statistiques
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2017
    Messages : 4
    Points : 4
    Points
    4

    Par défaut Problème d'affichage sur 2 digits dans une fonction CAT

    Bonjour,
    J'ai écrit une macro devant me permettre d'afficher une liste de dates (9 premiers mois sous la forme YYMMM (ex:17M01, pour le mois de janvier 2017) et 3 derniers mois sous la forme YYWXX (ex: 17W09 pour la semaine 9 de 2017).
    Pour cela, j'ai créer des variables intermédiaires dans une macro à l'aide de l'instruction %SYSFUNC.
    Ma variable x3 contient le mois et s'affiche bien sur 2 digits lors de l'affectation par le %LET, mais quand je l'introduis dans une fonction CAT (val2) , il n'y a plus qu'1 seul digit qui s'affiche (17M1).
    Quelqu'un connait-il la raison et la solution ?

    Ci-dessous le code que j'utilise:
    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
     
    %macro remplir_references_dates();
    %DO LOOP=7 %to 12;
    	%LET x1=%SYSFUNC(INTNX(month,%SYSFUNC(INTNX(day,%SYSFUNC(today()),%SYSFUNC(day(%SYSFUNC(today())))-1)),&LOOP.-19));
    	%LET x2=%SYSFUNC(MONTH(&x1.));
    	%LET x3=%SYSFUNC(PUTN(&x2., Z2.));
    	%LET val1=&x1.;
    	%LET val2=%SYSFUNC(CAT(%SYSFUNC(PUTN(&x1.,year2.)),M,&x3.));
     
    	PROC SQL;
    		INSERT INTO RDMTSSMF.REFERENCES_DATES
    			VALUES(&val1.,"&val2.");
    	QUIT;	
    %END;
    %DO LOOP=1 %to 29;
    	%LET val3=%SYSFUNC(INTNX(week,%SYSFUNC(INTNX(day,%SYSFUNC(today()),%SYSFUNC(day(%SYSFUNC(today())))-1)),&LOOP.-30));
    	%LET val4=%SYSFUNC(PUTN(%SYSFUNC(INTNX(week,%SYSFUNC(INTNX(day,%SYSFUNC(today()),%SYSFUNC(day(%SYSFUNC(today())))-1)),&LOOP.-30)),WeekV5.0));
    	PROC SQL;
    		INSERT INTO RDMTSSMF.REFERENCES_DATES
    			VALUES(&val3.,"&val4.");
    	QUIT;	
    %END;
    %mend remplir_references_dates;

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    janvier 2013
    Messages
    395
    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 : 395
    Points : 1 362
    Points
    1 362

    Par défaut

    bonjour,
    C’est un peu compliqué avec la fonction CAT dans une macro. Essayez plutôt l’instruction suivante ; c’est direct, facile et ça marche !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %LET val2=%SYSFUNC(PUTN(&x1., year2.))M&x3.  ;
    Cdt Ward

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur Statistiques
    Inscrit en
    octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Statistiques
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2017
    Messages : 4
    Points : 4
    Points
    4

    Par défaut

    Merci.
    Le support SAS m'a fourni une solution quasi similaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %LET val2=%SYSFUNC(CAT(%SYSFUNC(PUTN(&x1.,year2.)),M))&x3.;
    qui fonctionne très bien.

  4. #4
    Candidat au Club
    Femme Profil pro
    Ingénieur Statistiques
    Inscrit en
    octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Statistiques
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2017
    Messages : 4
    Points : 4
    Points
    4

    Par défaut

    Mais votre solution est bien plus simple...

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

Discussions similaires

  1. [AC-2003] Problème de test sur plusieurs champs dans une table
    Par Cavart dans le forum Access
    Réponses: 1
    Dernier message: 23/11/2011, 14h51
  2. Réponses: 3
    Dernier message: 15/06/2007, 11h27
  3. Réponses: 3
    Dernier message: 18/08/2006, 08h40
  4. recuperer l'affichage sur un ecran dans une variable
    Par oussama127 dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2006, 23h34

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