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 :

Comment mettre tout sur la même ligne ?


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    dataminer
    Inscrit en
    Juin 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : dataminer

    Informations forums :
    Inscription : Juin 2015
    Messages : 39
    Points : 33
    Points
    33
    Par défaut Comment mettre tout sur la même ligne ?
    Bonjour,

    question bête mais je ne me souviens jamais comment faire pour tout mettre sur la même ligne...

    J'ai ça :

    nb_ligne VARNUM Transform__en_contrat nb_ctr nb_devis tx_transfo nb_stock
    56789 . . . . . .
    . 94 . . . . .
    . . oui . . . .
    etc.

    alors qu'il me faudrait ça :

    nb_ligne VARNUM Transform__en_contrat nb_ctr nb_devis tx_transfo nb_stock
    56789 94 oui etc ....

    Quelqu'un aurait une manière simple de faire svp ?

    Merci à tous

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    La problématique n'est pas aussi simple qu'on la pense car la table contient des variables numériques et caractères et qu'on souhaite, certainement, garder l'ordre de ces variables dans son état initiale. Essayer de chercher des solutions côté la fonction COALESECE(C) et l'instruction RETAIN.

    Bon courage
    Ward

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 209
    Points : 145
    Points
    145
    Par défaut
    Bonjour,
    Le problème est posé de manière un peu imprécise.
    La solution que je propose peut cependant être un élément de réponse ... au besoin adaptable.
    Je suis parti de la table de départ suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    data t;
    	nb_ligne = 56789; output;
    	nb_ligne =.;varnum = 94 ; output;
    	nb_ligne =.;varnum = .;Transform__en_contrat = "oui"; output;
    	nb_ligne = 56790; Transform__en_contrat = ""; output;
    	nb_ligne =.;varnum = 95 ; output;
    	nb_ligne =.;varnum = .;Transform__en_contrat = "non"; output;
    run;
    proc print;run;
    Le traitement effectué sur cette table recopie les variables (lorsqu'elles sont renseignées) vers le bas.
    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
     
    data t2(drop=var1 var2 var3) ; set t ;
    	/* recopie des valeurs des 3 variables sur les lignes suivantes */
         retain var1 var2 var3 ;
    	 retain no 1;
     
         if not missing(nb_ligne) then var1=nb_ligne;
         nb_ligne = var1;
     
    	 if not missing(varnum) then var2 = varnum;
         varnum = var2;
     
    	 if not missing(Transform__en_contrat) then var3 = Transform__en_contrat;
         Transform__en_contrat = var3;
     
    	 /* numérotation des lignes pour chaque nb_ligne */
    	 no=no+1;
    	 if nb_ligne ne lag(nb_ligne) then no=1;
    run;
    proc print;run;
    Il ne reste plus qu'à conserver la dernière ligne (où l'ensemble des variables sont renseignées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    data t3(drop=no);set t2;where no = 3 /* on ne conserve que la dernière ligne pour chaque nb_ligne */ ;run;
    proc print;run;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    Si le nombre de variables de la table est déterminé à l'avance alors la conservation de la dernière ligne (où l'ensemble des variables sont renseignées) peut se faire de la manière suivante à l'aide de la fonction MOD sachant que le nombre de variables est égal à (3) :
    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
    data t2(drop=var1 var2 var3) ; set t ;
        /* recopie des valeurs des 3 variables sur les lignes suivantes */
         retain var1 var2 var3 ;
        * retain no 1;
     
         if not missing(nb_ligne) then var1=nb_ligne;
         nb_ligne = var1;
     
         if not missing(varnum) then var2 = varnum;
         varnum = var2;
     
         if not missing(Transform__en_contrat) then var3 = Transform__en_contrat;
         Transform__en_contrat = var3;
     
         /* numérotation des lignes pour chaque nb_ligne */
         *no=no+1;
         *if nb_ligne ne lag(nb_ligne) then no=1;
          if mod(_n_, 3)=0 then output ;
    run;
    Etape data=t3 est donc à supprimer.

    Ward

Discussions similaires

  1. imprimer message sur console tout sur le même ligne
    Par bruno2356 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 31/03/2010, 04h50
  2. Réponses: 3
    Dernier message: 31/03/2008, 18h38
  3. Sur la même ligne mettre du texte à gauche et à droite
    Par Oberown dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 20/06/2007, 16h50
  4. Comment disposer deux formulaires sur la même ligne ??
    Par soad029 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 05/05/2007, 05h14
  5. Voir tout les onglets sur une même ligne
    Par bnreb10 dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/08/2006, 12h08

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