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

Débutez Discussion :

Incrémenter un compteur


Sujet :

Débutez

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 198
    Points : 94
    Points
    94
    Par défaut Incrémenter un compteur
    Bonjour à tous,


    Je voudrais créer un compteur dans une table et l'incrémenter à chaque traitement (à chaque exécution du programme); voici ce que j'ai fait :

    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
    DATA  "Z:\WUNDERMAN\COMPTEUR\tab_cpt";
    cpt_new=000220;  /* la valeur de mon compteur à incrémenter sur 5 position */
    cpt_new=put(_N_+cpt_new,z5.);     
    run;
     
     
    DATA "Z:\WUNDERMAN\COMPTEUR\tab_cpt";
    set "Z:\WUNDERMAN\COMPTEUR\tab_cpt";
    cpt_old=cpt_new;                  *  => Ancienne valeur du compteur ;
    cpt_new=put(_N_+cpt_new,z5.);     *  => Nouvelle valeur du compteur ;
    run;
     
     
    proc sql; 
    select cpt_old , cpt_new 
    from "Z:\WUNDERMAN\COMPTEUR\tab_cpt";
    quit;
    je voudrais afficher ces valeur pour les mettre dans mon fichier de sortie mais je perds les trois "0" devant!

    est ce qu'il n'y a pas plus simple comme solution?


    je vous remercie.

  2. #2
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    ici il est question de conversion numérique / caractère, d'ailleurs la log indique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Character values have been converted to numeric

    De manière générale, la notation "0002" n'est possible que sur un caractère. Un numérique aura la forme '2' par exemple.
    l'instruction
    créée cpt_new en tant que numérique avec la valeur 220.

    L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cpt_new=put(_N_+cpt_new,z5.);
    devrait créer un caractère, mais comme cpt_new a déjà été déclaré comme numérique il y a conversion en numérique... donc sans 0 au préalable.


    Est-ce qu'il y a plus simple ? Oui vous pourriez juste écrire :
    cpt_new +1 ;

    Un compteur numérique me parait plus simpe à gérer qu'un caractère, mais peut-être avez-vous vos raisons pour vouloir le stocker en caractère avec un format z. Vous pourriez aussi créer une table SAS, avec cpt_new en numérique avec le format z. ... bref plusieurs possibilités !

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 198
    Points : 94
    Points
    94
    Par défaut
    merci pour votre réponse.

    J'ai besoin de ce compteur pour le mettre dans un champ qui est sur 5 caractères( si cpt_new=220 alors champ=00220) il faut compléter par des "0".
    voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DATA  compteur;
    format cpt_new  cpt_old Z6.;
    cpt_new=000220; 
    cpt_old=cpt_new;                  *  => Ancienne valeur du compteur ;
    cpt_new=put(_N_+cpt_new,z6.);     *  => Nouvelle valeur du compteur ; 
    run;
     
    DATA header;
    set compteur;
    format cpt_new1 Z6.;
    cpt_new1=put(cpt_new,6.);
    run;
    mais ça ne marche toujours pas , je perds mes "0"; comment les récupérer?

  4. #4
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 198
    Points : 94
    Points
    94
    Par défaut
    je m'en sors pas VRAIMENT!

    au fait j'ai besoin de sortir une entête pour mon fichier et cette entête doit contenir

    00021607022014135530

    000216= compteur sur 6 caractères qui s'incrémente à chaque exécution du programme.
    07022014 =date du jour à ce format JJMMAAAA
    135530= heure du jour format HHMMSS


    c'est fou mais je n'arrive pas à le sortir ce HEADER, problème de numérique à chaque fois et même quand je rajoute des put ça ne fonctionne pas!

    je vous remercie de votre aide!

  5. #5
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    il faut le transformer en caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DATA header;
    SET compteur;
    cpt_new_char=put(cpt_new,z6.);
    run;
    et cpt_new_char sera une variable caractère.

  6. #6
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 198
    Points : 94
    Points
    94
    Par défaut
    Merci ça fonctionne pour le compteur et l'heure du jour, par contre avec la date du jour ça ne marche pas, ça m'affiche le nombre de jour depuis 1960 même avec le put alors que je veux une date au format : JJMMAAAA (08042014)

    Regardez ce que j'avais fait:


    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    DATA  "Z:\WUNDERMAN\COMPTEUR\VAL_CPT";
    set "Z:\WUNDERMAN\COMPTEUR\VAL_CPT";
    cpt+1;
    compteur=put(cpt,z6.);
    run;
     
     
     
    DATA HEADERVN  ;
    set "Z:\WUNDERMAN\COMPTEUR\VAL_CPT" ;
    /*DATE DU JOUR*/
    ATTRIB Datedujour FORMAT=DDMMYYn.  ;
    Datedujour=date();
    Datedujour1=put(Datedujour,8.);
    /*HEURE*/
    date=DATETIME();
    variableTemps = TIMEPART(date);
    heure=hour(variableTemps);
    heure1 = put(heure,2.);
    minute=minute(variableTemps);
    minute1 = put(minute,2.);
    Second=Second(variableTemps);
    Second1 = put(Second,2.);
    if length(compress(heure1))   =1 then heure1 ="0"!!heure1;             else heure1=heure1;
    if length(compress(minute1))  =1 then minute1="0"!!minute1;            else minute1=minute1;
    if length(substr(Second1,1,2))=1 then Second1="0"!!substr(Second1,1,2);else Second1=substr(Second1,1,2);
    heuredujour=compress(heure1!!minute1!!Second1);
     
     
     
    data _null_;
    file  "Z:\WUNDERMAN\&REPERTOIRE\Decembre\VN\LIV\VN201407.TXT"  dlm='09'x lrecl=5000 ;
    set HEADERVN;
     
    if _n_ =1 then put 
     
    compteur    $7-12
    datedujour1 $13-20
    heuredujour $21-26
    ;
    run;

    voici ma ligne d'entête à l'affichage:

    000224 19821113645


    compteur=000224
    datedujour1= 19821
    heuredujour=113645


    la date du jour n'est pas au format JJMMAAAA!


    merci par vance pour votre aide.

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/03/2008, 14h53
  2. Réponses: 13
    Dernier message: 24/01/2008, 09h10
  3. Incrémenter un compteur oracle avc VB .NET
    Par requinham dans le forum Oracle
    Réponses: 4
    Dernier message: 11/06/2007, 17h20
  4. Incrémenter un compteur
    Par Didi17 dans le forum Access
    Réponses: 8
    Dernier message: 19/10/2005, 11h24

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