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 :

Importation fichier texte - OUTPUT Conditionnel


Sujet :

SAS Base

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Par défaut Importation fichier texte - OUTPUT Conditionnel
    Bonjour,

    Je suis en train de réaliser un programme d'importation d'un fichier texte dans différentes tables SAS.

    Pour cela, j'utilise les instruction INFILE pour lire le fichier (nom: RSFA) et INPUT pour écrire dans mes tables. La difficulté est la suivante:

    Les 8 premiers caractères de chaque ligne correspondent à un identifiant d'établissement de santé. Le 9ème caractère contient une lettre (de A à F) qui va déterminer dans quelle table SAS, la ligne du fichier texte va être copier.

    Dans un premier temps, j'ai donc créé la structure de mes tables RSFA_A, RSFA_B ... RSFA_F qui n'ont toutes la même longueur, ni les mêmes variables.

    Avant d'utiliser la fonction INPUT afin d'écrire ma ligne dans une table, je cherche donc à récupérer la valeur de la lettre afin de choisir la bonne table pour mon OUTPUT.

    J'aimerai donc stocker la valeur de la lettre dans une variable, puis effectuer un test à l'aide d'une instruction SELECT WHEN pour déterminer la suite de mon programme. Seulement je ne sais pas comment stocker cette valeur dans une variable sans l'avoir écrit précédemment dans une table à l'aide d'INPUT.

    Je vous remercie pour votre aide.

    Cordialement,

    Erwan Legrand

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 114
    Par défaut
    Bonjour,

    Je te propose une solution (il y'a peut être des meilleurs solutions) qui consiste à des étapes DATA pour chacune de tes tables (avec le même fichier entrée). Pour pouvoir détéerminer quelle table écrire il faut bloquer la valeur de la variable code en utilisant le signe @. Après tu supprimes toutes les observations qui ne satisfaisent pas la condition et puis tu écris la ligne d'input

    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
    data RSF_A;
    INPUT  @9 CODE :$1. @;
    if code ne 'A' then delete;
    input @1 id :$8.  @10 age;
    cards;
    00000001A 25
    00000002B M 75
    00000003C TOULOUSE
    ;
    run;
    data RSF_B;
    INPUT  @9 CODE :$1. @;
    if code ne 'B' then delete;
    input @1 id :$8.  @10 sex :$1. poids;
    cards;
    00000001A 25
    00000002B M 75
    00000003C TOULOUSE
    ;
    run;
    data RSF_C;
    INPUT  @9 CODE :$1. @;
    if code ne 'C' then delete;
    input @1 id :$8. @10 ville :$50.;
    cards;
    00000001A 25
    00000002B M 75
    00000003C TOULOUSE
    ;
    run;
    Bon courage

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Par défaut
    Citation Envoyé par ibrahima13 Voir le message
    Bonjour,

    Je te propose une solution (il y'a peut être des meilleurs solutions) qui consiste à des étapes DATA pour chacune de tes tables (avec le même fichier entrée). Pour pouvoir détéerminer quelle table écrire il faut bloquer la valeur de la variable code en utilisant le signe @. Après tu supprimes toutes les observations qui ne satisfaisent pas la condition et puis tu écris la ligne d'input

    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
    data RSF_A;
    INPUT  @9 CODE :$1. @;
    if code ne 'A' then delete;
    input @1 id :$8.  @10 age;
    cards;
    00000001A 25
    00000002B M 75
    00000003C TOULOUSE
    ;
    run;
    data RSF_B;
    INPUT  @9 CODE :$1. @;
    if code ne 'B' then delete;
    input @1 id :$8.  @10 sex :$1. poids;
    cards;
    00000001A 25
    00000002B M 75
    00000003C TOULOUSE
    ;
    run;
    data RSF_C;
    INPUT  @9 CODE :$1. @;
    if code ne 'C' then delete;
    input @1 id :$8. @10 ville :$50.;
    cards;
    00000001A 25
    00000002B M 75
    00000003C TOULOUSE
    ;
    run;
    Bon courage
    Stocker la variable dans la log, je n'y avais pas pensé. Mon problème était de savoir ou stocker cette valeur afin de faire un test dessus. J'essaierai donc votre solution, à mon retour de vacances!

    Merci beaucoup pour votre réactivité en tout cas.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur Statisticien
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Par défaut
    Bonjour Erwan,

    La proposition d'ibrahima13 de bloquer le curseur avec '@' est très bonne pour te mettre sur la piste.

    Tu peux ainsi regrouper les 3 étapes DATA en une seule :

    Par ex :
    12345678Aclinique TOTO
    12345678BCancerologie 2
    12345678BRadiothérapie 10
    12345678CDr SuperMario 75
    87654321ACHU LULU
    87654321BDermathologie 20
    87654321CDr G Bobo 36
    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
     
    filename rfsa "...\RFSA.txt";
     
    data RFSA_A(keep=idetab typRFSA categ rs)
    	RFSA_B(keep=idetab typRFSA unite nb_unit)
    	RFSA_C(keep=idetab typRFSA medecin age);
    	infile rfsa ls=1200;
    	input typRFSA $ 9 @;
    	putlog typRFSA=;
    	if typRFSA = "A" then do;
    		input 
    			idetab $ 1-8
    			typRFSA $ 9 
    			categ $ 10-18
    			rs $ 19-22;
    		output RFSA_A;
    	end;
    	if typRFSA = "B" then do;
    		input 
    			idetab $ 1-8
    			typRFSA $ 9 
    			unite $ 10-23 
    			nb_unit 24-25;
    		output RFSA_B;
    	end;
    	if typRFSA = "C" then do;
    		input
    			idetab $ 1-8
    			typRFSA $ 9  @10 
    			medecin $ 10-23
    			age 24-25;
    		output RFSA_C;
    	end;
    run;

Discussions similaires

  1. Importer fichier texte dans base Access
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/08/2006, 20h21
  2. probleme avec un import fichier texte dans mysql
    Par xodeax dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/07/2006, 13h24
  3. import fichier texte dans table contrainte
    Par philippe281281 dans le forum Outils
    Réponses: 5
    Dernier message: 14/06/2006, 17h01
  4. pb importation fichier texte
    Par borisa dans le forum Access
    Réponses: 5
    Dernier message: 24/02/2006, 17h44
  5. Réponses: 2
    Dernier message: 02/02/2006, 18h21

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