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 :

Extraction de données à partir d'un fichier Texte


Sujet :

SAS Base

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Extraction de données à partir d'un fichier Texte
    Bonjour,
    J'ai un fichier texte où la longueur de ligne varie en fonction d'un nombre contenu dans une colonne donnée. Voici un exemple :

    Num V1 V2 V3
    123X2AC
    124Y3ABD
    125Z5DAEFB
    .....
    Les 3 1ers caractères : identifiant, le 4ème (V1) : une variable d'un caractère, le 5ème (V2) : un entier qui détermine le nombre de variables qui suivent. Je souhaite créer une table SAS ayant la forme suivante :

    Num V
    123 A
    123 C
    124 A
    124 B
    124 D
    125 D
    125 A
    125 E
    125 F
    125 B
    ...

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    On peut faire ça avec une étape Data en utilisant le @ seul à la fin d'une instruction INPUT, qui met "en pause" le curseur de lecture. Quand SAS rencontre le @ seul, il arrête temporairement la lecture mais reste sur cette ligne de données, sans changer de ligne.
    Un INPUT sans @ final sert à "relâcher" le curseur de lecture pour passer à la ligne suivante, quand les données sont récupérées.
    Dans ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DATA work.donnees (KEEP=num v3) ;
      INFILE "c:\temp\bounekkar.txt" FIRSTOBS=2 DSD ;
      INPUT num $3. v1 $1. v2 1. @ ;
      DO i=1 TO v2 ;
        INPUT v3 $1. @ ;
        OUTPUT ;
      END ;
      INPUT ;
    RUN ;
    L'instruction OUTPUT dans la boucle force l'écriture de l'observation dans la table SAS créée.

    Est-ce que ça te convient ?
    Bon courage.
    Olivier
    Bon courage.
    Olivier

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème résolu
    C'est parfait. ça marche comme je veux. Merci infiniment Olivier.
    Question de détail : la ligne est parfois très longue. J'ai mis dans la ligne infile l'option : LRECL=7500 et je 'ai pas besoin de spécifier le DSD car il n'y a pas de délimiteur. est-ce que je suis sur la bonne voie?
    Merci encore.

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Oui, je mets DSD par réflexe. C'est le genre d'option qu'on a rarement l'occasion de regretter.
    J'ajouterais un MISSOVER pour être sûr quand même que SAS ne se lance pas à lire dans la ligne suivante sans autorisation ; et le LRECL est exactement ce qu'il te faut pour les lignes longues. Il n'y aura qu'à vérifier dans la Log les stats qui donnent la taille maximale d'une ligne pour vérifier que 7500 c'est assez long (mais franchement ça devrait).
    Bon courage.
    Olivier
    Bon courage.
    Olivier

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/09/2007, 13h10
  2. extraire des données à partir d'un fichier texte
    Par bigplayer dans le forum Langage
    Réponses: 3
    Dernier message: 03/04/2007, 22h33
  3. extraction de données à partir d'un fichier text ou xml
    Par bigplayer dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2007, 18h13
  4. ajout de données à partir d'un fichier texte
    Par drakenzara dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 14/04/2006, 13h39
  5. Réponses: 3
    Dernier message: 29/03/2006, 15h23

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