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

  1. #1
    Candidat au Club
    Homme Profil pro
    Assurances
    Inscrit en
    mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assurances
    Secteur : Finance

    Informations forums :
    Inscription : mars 2018
    Messages : 4
    Points : 2
    Points
    2

    Par défaut Découper N fois une chaine de caractères, pour créer N lignes au lieu d'une seule

    Bonjour,

    Voilà mon problème : j'ai une table en entrée dont un champs est en réalité un regroupement de N données (N n'étant pas forcément le même à chaque ligne, et N pouvant varier de zéro à ?). Dans ce champs, les données sont toujours séparées par une virgule puis un espace. Je souhaite n'avoir au final qu'une seule donnée dans ce même champs, en démultipliant le nombre de lignes autant de fois que nécessaire pour conserver toutes les données (et du coup en répétant les valeurs des autres champs à côté).

    Exemple :

    Table en entrée "TABLE_1" (Le champs qui doit être découpé s'appelle "NOM_DONNEE") :

    ID | NOM_DONNEE
    ---|------------------
    1 | aaaaaa
    2 |
    3 | bbbb, ccccccc, dd
    4 | eee, fffffffff


    Je souhaite la table en sortie "TABLE_2" suivante :

    ID | NOM_DONNEE
    ---|------------------
    1 | aaaaaa
    2 |
    3 | bbbb
    3 | ccccccc
    3 | dd
    4 | eee
    4 | fffffffff

    Pourriez-vous m'aidez SVP (étape DATA ou PROC SQL, peu m'importe :-)) ?
    Cordialement,
    Eric.

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

    Par défaut

    Bonjour,
    Vous pouvez essayer le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data TABLE_2 ;
    set TABLE_1;
    length col $10.;
    do i=1 by 1 while(scan(NOM_DONNEE,  i, ', ') ne " ") ;
    col=compress(scan(NOM_DONNEE, i, ', ')) ;
    output;
    end;
    run;
    Cordialement Ward

  3. #3
    Candidat au Club
    Homme Profil pro
    Assurances
    Inscrit en
    mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assurances
    Secteur : Finance

    Informations forums :
    Inscription : mars 2018
    Messages : 4
    Points : 2
    Points
    2

    Par défaut

    Merci pour la réponse.

    Je n'ai pas encore eu le temps de tester la proposition ; je travaille sur autre chose en même temps. Je ne manquerai pas de revenir pour dire si ça a fonctionné ou non.

    Il faut aussi que j'arrive à bien créer ma table de départ (TABLE_1) car pour le moment elle est sous format Excel et j'ai de petits soucis pour la mettre au format SAS (problème de valeur tronquée sur ma donnée "NOM_DONNEE" qui peut être très longue dans Excel). Je crois pouvoir gérer ce problème ; je vais voir ça...

    Eric.

  4. #4
    Candidat au Club
    Homme Profil pro
    Assurances
    Inscrit en
    mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assurances
    Secteur : Finance

    Informations forums :
    Inscription : mars 2018
    Messages : 4
    Points : 2
    Points
    2

    Par défaut

    Coucou, me revoilà.

    Merci hossward, ça marche pas mal !
    Mais j'ai quand même un souci. Car mes noms de données ("aaaaaa", "bbbb") peuvent en réalité comporter des espaces. Avec l'instruction telle quelle, ça me considère donc trop de données.


    Ainsi, pour être plus précis, j'ai en entrée la TABLE_1 suivante (je ne mets qu'une ligne) :

    ID | NOM_DONNEE
    ---|------------------
    3 | bbb b, cc ccc cc, dd


    Avec l'instruction telle quelle, j'obtiens :

    ID | NOM_DONNEE
    ---|------------------
    3 | bbb
    3 | b
    3 | cc
    3 | ccc
    3 | cc
    3 | dd


    Mais je souhaite :

    ID | NOM_DONNEE
    ---|------------------
    3 | bbb b
    3 | cc ccc cc
    3 | dd


    Une idée ?

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

    Par défaut

    Citation Envoyé par eric_802 Voir le message
    Dans ce champs, les données sont toujours séparées par une virgule puis un espace.
    Bonjour,
    Il s’agit, donc, un seul séparateur c’est le point virgule « , » . Voici la nouvelle proposition. A vérifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    do i=1 by 1 while(scan(NOM_DONNEE,  i, ',') ne " ") ;
    col=LEFT(scan(NOM_DONNEE, i, ',')) ;
    Cdt Ward

  6. #6
    Candidat au Club
    Homme Profil pro
    Assurances
    Inscrit en
    mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assurances
    Secteur : Finance

    Informations forums :
    Inscription : mars 2018
    Messages : 4
    Points : 2
    Points
    2

    Par défaut

    Ca marche ! Merci beaucoup !!!


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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/01/2013, 10h44
  2. Réponses: 3
    Dernier message: 26/03/2012, 18h30
  3. Réponses: 0
    Dernier message: 28/12/2008, 00h49
  4. Réponses: 3
    Dernier message: 27/04/2008, 20h10
  5. Découper une chaine de caractère pour un 'IN'
    Par Amiba dans le forum MS SQL-Server
    Réponses: 4
    Dernier message: 25/10/2007, 13h31

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