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 :

Export avec double quote pour variables texte


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Export avec double quote pour variables texte
    bonjour a tous!!

    j'ai besoin d'aide assez rapidement svp!!!!

    J ai une table sas que je dois exporter en format .csv et mettre les variables texte entre double quote (identificateur de texte double quote et séparatuer de texte .

    Ex :

    "julie";"marchand";"10 rue de la tour";(…)

    Mais Je ne parviens pas à mettre les variables entre double quote.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROC EXPORT DATA= dir1.adr_post_optin_P
                OUTFILE= "U:\test.csv" 
                DBMS=dlm ;
                delimiter=';';
    run;
    Est-ce que quelqu'un sait comment faire ?

    ce serait suuper!!!!!

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Une idée serait de passer par une simple étape data et des instructions put...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data work.test ;
       input nom $ pnom $ adr $ ;
       cards;
    Julie Marchand Adr1
    Eric  Acheteur Adr2
       ;
    run ;
    data _null_ ;
       set work.test ;
       file 'c:\temp\test.csv' ;
       put '"' nom '";"' pnom '";"' adr '";' ;
    run ;
    Bon courage !

  3. #3
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Bonjour,

    une façon élégante est de créer un tagset. Je vous propose un ancien que j'utilisais. Vous obtiendrez votre fichier plat.

    Stéphane.

    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
    /*********************************************/
     
    proc template; 
        define tagset tagsets.semisv;
            notes "SEMI-CSV definition";
            parent = tagsets.csv;
            define event header;
              start:
                put ';' / if !cmp(COLSTART, "1");
                put '"';
                put VALUE;
              finish:
                put '"';
            end;
            define event data;
              start:
                put ';' / if !cmp(COLSTART, "1");
                put '"';
                put VALUE;
              finish:
                put '"';
            end;
            define event colspanfill;
                put ';';
            end;
     
            define event rowspanfill;
                put ';' /if ! exists(VALUE);
            end;
        end; 
    run;
    /*********************************************/
     
     
    ods _all_ close;
     
    ods tagsets.semisv file='c:\temp\test.txt' ;
    proc print data=sashelp.class noobs ;
    run;
     
     
    ods tagsets.semisv close;

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    bonjour!

    merci pour vos réponses
    mais en fait les double quote doivent être un identificateur de texte

    par ex:
    "Paula";"Marie";;;"10 rue de la tour"

    et non
    "Paula";"Marie";"";"";"10 rue de la tour"

    ????

    merci de m'aider si vous avez une autre solution

  5. #5
    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 : 47
    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.
    Le format SAS $QUOTE. permet d'ajouter des guillemets autour d'une valeur. Pourquoi ne pas le modifier légèrement (avec une proc Format) pour indiquer que le seul cas à ne pas encadrer de guillemets serait une chaîne vide ?
    Ensuite, on exporte avec une étape Data, FILE et PUT, dans laquelle on applique le format surchargé à toutes les variables de type caractère.
    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
    DATA work.test ;
    	INFILE CARDS DLM="," DSD MISSOVER ;
    	INPUT nom $ prenom $ cpt1 $ cpt2 $ adr :$40. ;
    CARDS ;
    Paula,Marie,,,"10 rue de la tour"
    Forum,John,"Appt 2","3e etage","17 rue du bois"
    ;
    RUN ;
     
    PROC FORMAT ;
    	VALUE $export
    		" " = [$1.]
    		OTHER = [$QUOTE.]
    	;
    RUN ;
    DATA _NULL_ ;
    	SET work.test ;
    	FILE "c:\temp\test.txt" DLM=";" ;
    	FORMAT 	_CHARACTER_ $export. ;
    	PUT nom prenom cpt1 cpt2 adr ;
    RUN ;
    Olivier

  6. #6
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup!! ça marche parfaitement!!

    par contre comment je peux faire pour avoir les en-têtes (avec séparateur
    mais sans les double quote ?
    car elles s'affichent à la suite sans séparateur... je ne sais pas pourquoi..

    merci

  7. #7
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    J'insiste ...

    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
     
    data class;
    set sashelp.class;
    if sex='F' then sex='';
    run;
     
    /*********************************************/
    proc template; 
        define tagset tagsets.semisv;
            notes "SEMI-CSV definition";
            parent = tagsets.csv;
            define event header;
              start:
                put ';' / IF !cmp(COLSTART, "1");
                put '';
                put VALUE;
              finish:
                put '';
            end;
            define event DATA;
              start:
                put ';' / IF !cmp(COLSTART, "1");
                put '"'  /IF EXISTS(VALUE);
                put VALUE;
              finish:
                put '"'  /IF EXISTS(VALUE);
            end;
            define event colspanfill;
                put ';';
            end;
     
            define event rowspanfill;
                put ';' /IF ! EXISTS(VALUE);
            end;
        end; 
    run;
    /*********************************************/
     
     
    ods _all_ close;
     
    ods tagsets.semisv file='c:\temp\test.txt' ;
    proc print DATA=class noobs ;
    run;
    =>
    Name;Sex;Age;Height;Weight
    "Alfred";"M";"14";"69.0";"112.5"
    "Alice";;"13";"56.5";" 84.0"
    "Barbara";;"13";"65.3";" 98.0"
    "Carol";;"14";"62.8";"102.5"
    "Henry";"M";"14";"63.5";"102.5"
    "James";"M";"12";"57.3";" 83.0"

    ods tagsets.semisv close;

  8. #8
    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 : 47
    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
    La solution de Stéphane/Datametric est effectivement très chic, très moderne, très ODS.
    Nos propositions -- Bruno et moi -- sont plus rustiques, mais fonctionnent avec toutes les versions de SAS (j'ai eu des mauvais souvenirs de tests dans la proc Template avec SAS v8).
    Pour l'en-tête, si tu veux garder la solution de l'étape Data, tu prévois un PUT qui affiche ce que tu veux, à exécuter une fois (condition IF _N_=1, pour la 1e observation lue seulement).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DATA _NULL_ ;
      SET work.test ;
      FILE "c:\temp\test.txt" DLM=";" ;
      FORMAT 	_CHARACTER_ $export. ;
      IF _N_=1 THEN PUT "nom ; prénom ; adresse (complément 1) ; adresse (complément 2) ; adresse (numéro et voie)" ;        
      PUT nom prenom cpt1 cpt2 adr ;
    RUN ;
    Olivier

  9. #9
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    merci datametric mais je ne peux pas avoir accès à sasuser et donc je ne peux utiliser les template car cela indique que je n'ai pas l'autorisation...

    donc je dois trouver une autre solution

    mais merci beaucoup!!

    j utiliserai ceci dès que mon soucis d'autorisation sera réglé!!!

  10. #10
    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 : 47
    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
    L'accès à SASUSER n'est pas une condition sine qua non pour utiliser des proc Template personnalisées. On peut utiliser n'importe quelle bibliothèque, par exemple WORK.
    Pour ça, il faut ajouter dans la proc Template le lien de stockage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        define tagset tagsets.semisv / store = work.tag ;
    et avant de s'en servir, mettre à jour la liste des chemins où sont stockées les définitions utiles à l'ODS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ODS PATH work.tag sasuser.templat sashelp.tmplmst ;

  11. #11
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Pas d'accès à SASUSER ? C'est pas commun ça.

    Mais peux-tu réessayer avec cela en premier :

    ods path work.templat(write);

    Merci.

  12. #12
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    ah ok super !! merci beaucoup!!
    ça marche mais par contre les infos sont les unes après les autres (et non à la ligne lorsqu'il s'agit d'une autre personne)
    vous savez pourquoi?

  13. #13
    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 : 47
    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
    les infos sont les unes après les autres (et non à la ligne lorsqu'il s'agit d'une autre personne)
    Je crois qu'il faudrait ajouter dans la proc Template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     define event row;
      finish:
        put NL ; /* NL=New Line */
    end;
    avant "define event rowspanfill" par exemple.

  14. #14
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup!!
    là c'est parfait !!

    merci encore!!

    bonne soirée à vous tous

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

Discussions similaires

  1. [PowerShell] double quotes et variables dans une ligne de script Powershell
    Par Aenean dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 08/12/2014, 17h55
  2. [XL-2010] exporter un fichier excel avec double quotes
    Par Melvine dans le forum Excel
    Réponses: 1
    Dernier message: 06/03/2014, 23h32
  3. affichage de donnée avec double quote
    Par artichaudd dans le forum Langage
    Réponses: 4
    Dernier message: 24/11/2011, 11h35
  4. Réponses: 11
    Dernier message: 08/07/2011, 13h33
  5. Filtre VBA, problemme avec double quote
    Par choubak dans le forum VBA Access
    Réponses: 7
    Dernier message: 29/06/2007, 09h31

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