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] Ajout valeur manquantes date (trimestre) [Fait]


Sujet :

Macro

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Par défaut [Macro] Ajout valeur manquantes date (trimestre)
    Bonjour,

    J'ai un léger souci.
    J'ai une table de résultats SAS sous cette forme-là :

    A B C
    22007 456 451.123
    32007 468 466.456
    42007 480 474.563
    12008 486 484.756
    22008 486 486.359
    . . 482.865
    . . 474.123
    . . 496.263

    J'aimerais ajouter à la colonne A, les valeurs manquantes automatiquement grace à une boucle (ou autre), en sachant que la colonne A représente les trimestres.
    En espérant que vous pourrez m'aider, je vous remercie par avance.

  2. #2
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Bonjour,
    Je n'ai pas bien cerné ton problème! Tu veux ajouter des valeurs manquantes à ta colonne A???
    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 régulier
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Par défaut
    Désolé, je me suis mal exprimé.

    En fait je veux simplement ajouter dans la colonne A, les trimestres correspondant manquant.

  4. #4
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Par défaut
    Je vous redonne la forme de la table :

    22007 456 89 451.61497628
    32007 468 90 466.72620758
    42007 480 91 474.67348936
    12008 486 92 484.11794168
    22008 486 93 486.38391315
    . . . 482.11226535
    . . . 474.49172019
    . . . 463.58011042
    . . . 449.85770595

  5. #5
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Par défaut
    Limpide ! Comme d'habitude. Merci v_bourcier.

    Juste une question à uekoner :

    Citation Envoyé par uekoner Voir le message
    Je vous redonne la forme de la table :

    22007 456 89 451.61497628
    32007 468 90 466.72620758
    42007 480 91 474.67348936
    12008 486 92 484.11794168
    22008 486 93 486.38391315
    . . . 482.11226535
    . . . 474.49172019
    . . . 463.58011042
    . . . 449.85770595
    On est donc passé à 4 colonnes :
    A = TrimestreAn
    B = ?
    C = N° d'ordre
    D = Valeur

    C'est quoi cette colonne B ?
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  6. #6
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Par défaut
    Merci pour toutes vos réponses !!

    La colonne B correspond à la valeur réelle du loyer.
    La colonne D correspond à la valeur estimée du loyer (que j'obtiens avec la Proc Forecast d'où le problème des trimestres manquants.)
    Ce que je veux faire ensuite, c'est de tracer ces deux séries sur un même graphique avec la Proc Gplot.
    Par contre, j'ai essayé de transformer la variable des trimestres en une variable SAS DATE de ce format : YYQ6. afin de tracer plus facilement les graphiques et ne pas avoir un problème de légende.
    Donc peut-être qu'en utilisant ce format de date, il serait plus facile d'ajouter les trimestres qui manquent ?

  7. #7
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Juste une question : tes données sont donc forcément triées, c'est-à-dire que :
    32008 482.11226535
    42008 474.49172019
    Si oui avec un lag et des macro-variables tu peux surement bidouiller quelque chose. En lui demandant d'ajouter +1 si le premier chiffre est inférieur à 4, 0 si égale à 4 et dans ce cas dernier chiffre +1.
    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.

  8. #8
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Par défaut
    Les données sont bien triées par trimestre.
    Par contre je ne vois pas trop comment faire avec la méthode que tu proposes. La programmation pure n'est pas trop mon domaine, aurais-tu un exemple concret que je puisse mettre en application à mes données ?

  9. #9
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Tu peux consulter la FAQ SAS du site et/ou rechercher dans les anciens topics du forum pour t'aider.
    Les mots clés : étape DATA, LAG(), SUBSTR(), MACRO VARIABLE.
    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.

  10. #10
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 16
    Par défaut
    Bonjour,

    Je pense qu'il faut passer par un compteur. Je propose une approche en quatre étapes :

    1. Sauvegarder le numéro de trimestre et l'année dans deux variables différentes
    2. Remplacer les valeurs manquantes pour le trimestre
    3. Remplacer les valeurs manquantes pour l'année
    4. Remettre les informations dans une seule variable.


    Dans un premier temps, je te propose des détails sur l'approche. Dans un second temps, tu trouveras le code.

    Véronique

    _____________________________
    Véronique Bourcier
    veronique.bourcier@sasreference.fr
    www.sasreference.fr
    Blog pour se former au logiciel SAS

    1. Variables trimestre et année

    J'ai assumé que la variable A était numérique puisque les valeurs manquantes sont symbolisées par des points. Si ce n'est pas le cas, il faudra faire appel aux fonctions caractères de SAS pour extraire le trimestre et l'année.

    Pour créer la variable TRIMESTRE, je divise le nombre par 10 000 pour n'avoir que le chiffre correspondant au trimestre dans la partie entière et je garde la partie entière avec la fonction FLOOR.

    Pour créer la variable ANNEE, j'enlève le numéro du trimestre multiplié par 10 000.

    Je n'opère l'opération que pour les valeurs non manquantes de A en utilisant la fonction MISSING.

    2. Un compteur pour le semestre.

    Si la valeur A est manquante j'ajoute 1 à la dernière valeur lue par SAS.

    Si la valeur actualisée est égale à 5 alors, le numéro du trimestre est réinitialisé.

    3. Un compteur pour l'année

    A chaque fois que A est manquant et que le trimestre est 1, j'ajoute 1 à l'année. Sinon, j'utilise la dernière valeur allouée à la variable ANNEE.

    4. Recréer la variable A

    La variable A est actualisée : trimestre * 10 000 + annee.
    Les variables TRIMESTRE et ANNEE sont supprimées n'étant plus nécessaires.



    a. Créer le data set pour l'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    data orig;
       input A B C;
       datalines;
    22007 456 451.123
    32007 468 466.456
    42007 480 474.563
    12008 486 484.756
    22008 486 486.359
    . . 482.865
    . . 474.123
    . . 496.263
    ;
    run;
    b. Les 4 étapes

    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
    data final (drop=trimestre annee);
       set orig;
       *Etape 1;
       if not missing(a) then 
          do;
             trimestre=floor(a/10000);
             annee=a-trimestre*10000;
          end;
       *Etape 2;
       if missing(a) then trimestre+1;
       if trimestre=5 then trimestre=1;
       *Etape 3;
       if missing(a) and trimestre=1 then annee+1;
       *Etape 4;
       a=trimestre*10000+annee;
    run;
    c. Visualiser le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proc print data=final;
    run;

  11. #11
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Par défaut
    Bonjour,

    Serait-il possible de procéder à peu près de la même façon mais en ayant ce format de trimestre (format alphanumérique)? :

    2007.2
    2007.3
    2007.4
    2008.1
    2008.2
    .
    .

    Merci d'avance

    Citation Envoyé par v_bourcier Voir le message
    Bonjour,

    Je pense qu'il faut passer par un compteur. Je propose une approche en quatre étapes :

    1. Sauvegarder le numéro de trimestre et l'année dans deux variables différentes
    2. Remplacer les valeurs manquantes pour le trimestre
    3. Remplacer les valeurs manquantes pour l'année
    4. Remettre les informations dans une seule variable.


    Dans un premier temps, je te propose des détails sur l'approche. Dans un second temps, tu trouveras le code.

    Véronique

    _____________________________
    Véronique Bourcier
    veronique.bourcier@sasreference.fr
    www.sasreference.fr
    Blog pour se former au logiciel SAS

    1. Variables trimestre et année

    J'ai assumé que la variable A était numérique puisque les valeurs manquantes sont symbolisées par des points. Si ce n'est pas le cas, il faudra faire appel aux fonctions caractères de SAS pour extraire le trimestre et l'année.

    Pour créer la variable TRIMESTRE, je divise le nombre par 10 000 pour n'avoir que le chiffre correspondant au trimestre dans la partie entière et je garde la partie entière avec la fonction FLOOR.

    Pour créer la variable ANNEE, j'enlève le numéro du trimestre multiplié par 10 000.

    Je n'opère l'opération que pour les valeurs non manquantes de A en utilisant la fonction MISSING.

    2. Un compteur pour le semestre.

    Si la valeur A est manquante j'ajoute 1 à la dernière valeur lue par SAS.

    Si la valeur actualisée est égale à 5 alors, le numéro du trimestre est réinitialisé.

    3. Un compteur pour l'année

    A chaque fois que A est manquant et que le trimestre est 1, j'ajoute 1 à l'année. Sinon, j'utilise la dernière valeur allouée à la variable ANNEE.

    4. Recréer la variable A

    La variable A est actualisée : trimestre * 10 000 + annee.
    Les variables TRIMESTRE et ANNEE sont supprimées n'étant plus nécessaires.



    a. Créer le data set pour l'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    data orig;
       input A B C;
       datalines;
    22007 456 451.123
    32007 468 466.456
    42007 480 474.563
    12008 486 484.756
    22008 486 486.359
    . . 482.865
    . . 474.123
    . . 496.263
    ;
    run;
    b. Les 4 étapes

    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
    data final (drop=trimestre annee);
       set orig;
       *Etape 1;
       if not missing(a) then 
          do;
             trimestre=floor(a/10000);
             annee=a-trimestre*10000;
          end;
       *Etape 2;
       if missing(a) then trimestre+1;
       if trimestre=5 then trimestre=1;
       *Etape 3;
       if missing(a) and trimestre=1 then annee+1;
       *Etape 4;
       a=trimestre*10000+annee;
    run;
    c. Visualiser le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proc print data=final;
    run;

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/01/2011, 11h54
  2. Réponses: 1
    Dernier message: 23/09/2009, 03h23
  3. [A-07]: ajouter une valeur à une Date
    Par amazon dans le forum VBA Access
    Réponses: 8
    Dernier message: 03/03/2009, 16h22
  4. [Macro] Ajouter un jour à une date sas
    Par Tyler Durden dans le forum Macro
    Réponses: 2
    Dernier message: 15/01/2009, 12h57
  5. Réponses: 9
    Dernier message: 19/09/2008, 17h26

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