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

SAS Base Discussion :

Créer lignes manquantes [DATA]


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Créer lignes manquantes
    Bonjour,
    je ne parviens pas à résoudre le problème suivant:
    Pour une année de survenance donnée AN_SURV, et pour un mois de survenance donné MOIS_SURV, je dispose de mois d'ouverture MOIS_OUV affectés d'un nombre d'OUVERTS.

    1. Par AN_SURV et par MOIS_SURV, je voudrais affecter les lignes des MOIS_OUV manquants entre deux MOIS_OUV existants affectés des valeurs OUVERTS=0.

    Dans cet exemple, pour AN_SURV=1, MOIS_SURV=1, il manque les MOIS_OUV:6,7,8 et 10 à 16.

    2.Je voudrais également créer des lignes si elles sont manquantes jusqu'à une valeur passée en paramètre. %moisfin=20 par exemple.

    J'ai utilisé first.MOIS_OUV last.MOIS_OUV, utilisé retain et crée des sous-cas mais ça ne fonctionne pas.


    Mon exemple:

    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 entree ;
    format AN_SURV MOIS_SURV MOIS_OUV Ouverts 16.;
    AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=1 ;Ouverts=100 ;output ;
    AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=2 ;Ouverts=200 ;output ;
    AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=3 ;Ouverts=30 ;output ;
    AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=4 ;Ouverts=10 ;output ;
    AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=5 ;Ouverts=5 ;output ;
    AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=9 ;Ouverts=100 ;output ;
    AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=17 ;Ouverts=99 ;output ;
    AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=1 ;Ouverts=101 ;output ;
    AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=2 ;Ouverts=201 ;output ;
    AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=3 ;Ouverts=31 ;output ;
    AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=4 ;Ouverts=11 ;output ;
    AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=5 ;Ouverts=6 ;output ;
    AN_SURV=2009 ;MOIS_SURV=1 ;MOIS_OUV=1 ;Ouverts=1100 ;output ;
    AN_SURV=2009 ;MOIS_SURV=1 ;MOIS_OUV=5 ;Ouverts=1150 ;output ;
    Run ;
    Merci pour votre aide.

    PS:
    voici mon code qui ne fonctionne pas:

    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
    42
    43
    44
    %let Moisfin=20;
    data sortie (drop= nb_ouverts prochain_mois_ouv mois_ouv i nbmois);
    set entree;
    by AN_SURV MOIS_SURV;
    retain nb_ouverts nbmois dernier_mois_ouv prochain_mois_ouv;
      if first.MOIS_OUV then do;
          nb_ouverts=ouverts;
          dernier_mois_ouv=MOIS_OUV;
          output;
      end;
      else do;   
            if MOIS_OUV=dernier_mois_ouv+1 then do;                     
               nb_ouverts=ouverts;
               dernier_mois_ouv=MOIS_OUV;
    		   output;
            end;
            else do;
                prochain_mois_ouv=MOIS_OUV;
               	nbmois=prochain_mois_ouv-dernier_mois_ouv;
                do i=1 to nbmois-1;
                      MOIS_OUV=dernier_mois_ouv+i;
                output;
                end;
                MOIS_OUV=prochain_mois_ouv;
    			ouverts=0;
     
                output;
                ouverts=0;
                dernier_mois_ouv=MOIS_OUV;
            end;
     
     
      end;
     
          if last.MOIS_OUV and MOIS_OUV ne &Moisfin. then do;
                nbmois=&Moisfin.-MOIS_OUV;
                do i=1 to nbmois;
                      MOIS_OUV=MOIS_OUV+i;
     
                      output;
                end;  
            end;
     
    run;

  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,

    je pense qu'il faut créer une table avec toutes les valeurs désirées AN_SURV MOIS_SURV MOIS_OUV etc avec OUVERTS=0, puis faire un merge.

    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
    data data1 ;
    do AN_SURV=2008 to 2009 ;
       do MOIS_SURV =1 to 2 ;
         do MOIS_OUV=1 to 20 ;
    	   Ouverts=0 ;
    	   output ;
    	 end ;
       end ;
    end ; 
    run ;
     
    data data2 ;
      merge  data1 entree ;
      by AN_SURV MOIS_SURV MOIS_OUV ;
    run ;
    Cordialement,
    Géraldine Cade-Deschamps
    Support Clients SAS
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Merci
    Merci beaucoup pour cette solution.

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

Discussions similaires

  1. Ajouter des lignes "manquantes"
    Par Seb33300 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/10/2009, 17h34
  2. Deleter les lignes manquantes dans une Data
    Par manoir dans le forum SAS Base
    Réponses: 5
    Dernier message: 23/04/2009, 15h49
  3. Créer ligne : style photoshop
    Par Lostini dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/02/2008, 14h00
  4. [VBA] créer ligne graphique par code
    Par cbleas dans le forum Access
    Réponses: 4
    Dernier message: 29/08/2006, 07h22
  5. Générer les lignes manquantes
    Par prophete3d dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 11/07/2006, 16h49

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