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 fixer ses formats lors de l'import d'un fichier .csv [DATA]


Sujet :

SAS Base

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut Comment fixer ses formats lors de l'import d'un fichier .csv
    Bonjour,

    Je suis en face d'un problème qui, j'imagine, est relativement simple quand on sait bien manipuler SAS.

    Je dois importer une table qui est au format .csv

    J'ai utilisé la PROC IMPORT mais il me fixe plein de formats que je ne connais pas (BEST12.)

    Il faudrait donc que je réussisse un import avec les formats que je veux. Voici donc mes questions :

    1) J'ai la PROC DATA avec toutes les ATTRIB LABEL et FORMAT qui m'intéressent. Est-ce possible d'importer mon fichier .csv directement dans cette table ? (de "rajouter des lignes" dans une table vierge)

    2) J'ai essayé de faire l'étape DATA suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DATA matable;
    ATTRIB id LABEL "clé";
    ATTRIB nom LABEL "nom de famille";
    ...
    INFILE "C:/.../matableaimporter.csv" FIRSTOBS = 2 DLM = ";" MISSOVER;
    INPUT
    @1 id 6.
    @8 nom $50.
    ...
    ;
    RUN;
    le problème est qu'il ne reconnaît pas quand une variable ne fait pas "toute la longueur" (ex. ici si qqun s'appelle "DUPONT", ça ne fait pas 50 caractères et donc il va mettre les informations de la variable suivante dans le nom...

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    hello,
    grâce aux deux point ( : ) , t'indique à sas que la longueur tes variables peut variée.
    exemple;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DATA matable;
    ATTRIB id LABEL "clé";
    ATTRIB nom LABEL "nom de famille";
    ...
    INFILE "C:/.../matableaimporter.csv" FIRSTOBS = 2 DLM = ";" MISSOVER;
    INPUT
    @1 id 6.
    @8 nom  : $50.
    ...
    ;
    RUN;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Alors effectivement il y a plutôt du mieux... C'est à dire qu'en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @1 id : 6.
    @8 nom  : $50.
    il reconnait au moins mon Id et peut l'importer (il fait entre 3 et 5 caractères).

    Par contre il ne commence pas à lire le nom au bon endroit (il considère que l'id fait toujours 6 caractère quand il veut lire le nom....) Faut-il rajouter quelque chose au niveau du "@8" ?

    En plus je viens de m'apercevoir qu'il ne tient pas forcément compte des formats que je lui ai demandé :-(

    Ce qui fait que je n'arrive pas à imposer les variables qui m'intéressent. Pourtant j'ai vérifié sur le fichier original et par exemple mon Id ne fait pas plus de 5 de longueur, et il me le met quand même en best12, de longueur 8 (c'est quoi ce format best12 ????).

    Ce n'est pas possible de faire comme je pensais dans le point 1) ? (ajouter les lignes à une table déjà existante...)

  4. #4
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Bon ok;

    déjà quand tu spécifie le séparateur ( dlm=) tu n'as pas besoin de dire à SAS d'où commence la lecture de tes variables.

    le BEST12, c'est un informat numérique, ( format c'est pour l'affichage etl'informat c'est pour les valeur stockée).
    et SAS emploie le BEST12 comme valeur numérique par defaut.

    En ce qui concerne ton problème avec les ( , tu peux utiliser une proc import et spécifier comme option,

    Si t'es en SASV9tu peux remplacer les deux points par
    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    DATA matable;
    ATTRIB id LABEL "clé";
    ATTRIB nom LABEL "nom de famille";
    ...
    INFILE "C:/.../matableaimporter.csv" FIRSTOBS = 2 DLM = ";" MISSOVER;
         input name $ 1-9
             @8 nom   $varying50.   ;
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    En enlevant le "@nombre" au début des lignes suivant le INPUT c'est bon il me prend les bonnes données aux bons endroits. Par contre il me garde du BEST12 dès que c'est un format numérique (pour les formats textes c'est bon il les prend...). Comment se séparer de ce format ?

    Je vais tester une autre table pour voir comment il gère les dates...

  6. #6
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    si tu n'as pas spécifié l'informat SAS donnera le BEST12. par défaut.
    est ce que tu peux joindre ton étape data et indiquer quelle variable te cause problème ?

    sinon,essaie d'adapter cette syntaxe à ton cas:
    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 malib.maTable ;
     
     ATTRIB  var1
    		LENGTH=7
    		LABEL= 'variable numéro 1'
            FORMAT=
            INFORMAT=9.2;/*ici 7 entiers et 2 décimales*/ 
     ATTRIB  var2
    		LENGTH=$50
    		LABEL= 'variable numéro 2'
            FORMAT=
            INFORMAT=$50;/*ici 50 caractères*/  
     
     
    		infile "c:\data\monfic.csv"	dlm=";" ;
     
    	input var1 var2 ..;
    	run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  7. #7
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Enfin pour apprendre plus , regardes formats et informat sas.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Merci Sam, j'ai réussi à avancer même si je ne suis pas encore au bout de mes peines

    J'ai essayé avec le LENGTH que tu proposais mais finalement il s'en sort bien sans.

    Par contre j'ai un nouveau problème, hu hu hu... Je mets une simplification de mon étape data :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DATA facture;
    	ATTRIB fact_cle LABEL = "Clé facture" FORMAT = 11.;
    	(...)
    	ATTRIB nais_dt LABEL = "Date de naissance " FORMAT = DDMMYY10. INFORMAT = YYMMDD10.;
    (...)
    	INFILE "C...\facture.csv" FIRSTOBS = 2 DLM = ";" MISSOVER;
    	INPUT fact_cle (...) nais_dt (...);
    RUN;
    Or, de très nombreux enregistrements ont une valeur manquante pour la nais_dt. La log me retourne ça :

    NOTE: Invalid data for nais_dt in line 2 76-84.

    D'après ce que j'ai compris le MISSOVER fait que SAS rempli par des données manquante uniquement en fin de ligne.

    Mais dans mon programme, ce sont des données qui sont manquantes en milieu de ligne. Or, SAS décale toute ma ligne d'un cran vers la gauche à chaque donnée manquante... Donc ça ne ressemble plus à rien !

    N'y a-t-il pas une option à mettre quelque part pour que quand il y a une donnée manquante, il ne mette rien à cette variable et continue (au lieu d'y caser la variable suivante...). Au fait j'ai bien SAS V9.

  9. #9
    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
    L'option s'appelle DSD.
    Bon courage.
    Olivier

  10. #10
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Citation Envoyé par Areis Voir le message
    J'ai essayé avec le LENGTH que tu proposais mais finalement il s'en sort bien sans.
    il faut jouer sur l'informat, le length c'est la place memoire pour le stockage des données.
    le format c'est pour l'affichage.
    l'informat c'est pour la lecture et surtout pour les valeurs stockées.
    donc toi tu dois modifier l'INFORMAT.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Yes, c'est ça ! Merci Olivier

    Ca marche impec.

    Maintenant, dernière étape : comment peut-on fixer des format personnalisés par rapport aux données importées ? (pour utiliser des proc format déjà écrits)

    1) Si la donnée est stockée selon la valeur saisie : ex. "0" ou "1" pour du oui/non.

    2) Si la donnée est stockée déjà selon une bibliothèque de valeur : ex. "oui" ou "non".

  12. #12
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    De cette façon

    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
     
    proc format ;
    value  var
    1='oui'
    2='non'
    other='??';
    run;
     
    data test;
     
    input var;
    cards;
    1
    2
    1
    2
    3
    .
    4
    ;
    run;
     
     
     
    data test1;
    set test;
    var1= put(var,var.);
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Je n'ai pas compris ta réponse, Sam

    Je m'en suis sorti pour mon problème 1)

    Pour mon problème 2), voici un peu plus de détail avec un exemple concret :

    J'ai le format suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc format;
    value sexe
    0 = "Indéterminé"
    1 = "Masculin"
    2 = "Féminin";
    run;
    J'ai une table .csv où les valeurs pour la variable sexinit sont saisies "Homme", "Femme" et "Indéterminé". Mon objectif est de récupérer cette variable selon mon format. Voilà une simplification ce que j'ai fait pour l'instant :

    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
    /* 1 - J'importe ma table telle quelle, j'ai laissé dans l'exemple que la variable posant problème */
     
    data table1;
    attrib sexeinit label = "Sexe" format = $11.;
    infile "C:/...csv" firstobs = 2 dlm = ";" dsd missover;
    input sexeinit;
    run;
     
    /* 2 - Je change la valeur de la variable pour s'accorder à mon format */
     
    data table2;
    length sexe 3;
    set table1;
    if sexeinit = "Homme" then sexe = 1;
    if sexeinit = "Femme" then sexe = 2;
    if sexeinit = "Indéterminé" then sexe = 0;
    run;
     
    /* 3 - Je ne conserve que ma nouvelle variable */
     
    data table3 (drop = sexeinit);
    set table2;
    run;
    Voilà où j'en suis. Maintenant j'ai quelques questions :

    1) Que puis-je faire pour pouvoir à nouveau fixer mes format et mes informat sur ma nouvelle variable sexe ? Dois-je faire une nouvelle étape data comme j'ai fait à mon étape 1/ mais en faisant un infile avec une table SAS ????

    2) Pourquoi la longueur minimale fixée lors de mon étape 2/ pour ma nouvelle variable numérique est 3 ? (j'ai testé en caractère on peut fixer 1 seul digit) C'est bizarre non ?

  14. #14
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    essaies ce programme, et dis moi si c'est ce que tu recherches.
    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
    45
     
     
     
     
    proc format;
    value $ sex
    "Indéterminé"=0
    "Masculin" =1
    "Féminin"=2
    other=.
    ;
     
    run; 
     
     
     
     
    data table1;
     
     input sexeinit $20.;
     cards;
    Homme
    Femme
    Indéterminé
    Masculin
    Féminin
     ;
     run;
     
     
    /* 2 - Je change la valeur de la variable pour s'accorder à mon format */
     
    DATA table2;
    length sexe 3;
    SET table1;
     
    sexe= put(sexeinit,sex.);
     
    run;
     
    /* 3 - Je ne conserve que ma nouvelle variable */
     /*
    DATA table3 (DROP = sexeinit);
    SET table2;
    run;
    en ce qui concerne le length, c'est toute une autre histoire. Le length = la longueur en BYTES, c'est l'espace mémoire réservé. La longueur minimum d'une variable numérique sous Windows est de 3 BYTES et de 2 sous Gros système (MVS,VM/CMS,...). Pour la variable de type caractère le minimum est de 1 BYTES et elle correspond à un caractère, deux caractères=2 BYTES et ainsi de suite. Pour les valeurs de type numérique c’est un peu compliquer. Regarde ICI
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Merci pour le lien sur la longueur des variables numérique, je m'endormirai moins bête

    J'ai essayé ton programme et ça ne fonctionne pas. Le "data table1" fonctionne (même si je ne sais pas à quoi sert le cards suivis des cas possibles ). Le "data table2" (j'ai remplacé sex. par sexe.) il y a les problèmes suivants :

    1) Ma nouvelle variable sexe est vide (et en BEST12...)

    2) Mon ancienne variable sexinit est toujours selon le format initial.

    Qu'est censée faire l'instruction put ?

  16. #16
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Citation Envoyé par Areis Voir le message
    J'ai essayé ton programme et ça ne fonctionne pas.
    Oh que si.
    Au fait j'ai créé un exemple que tu dois supprimer et remplacer par ta table table1


    puis j'ai essayé de t'expliquer {par le code} que la proc format ne fait que formater les donner.
    Je reviendrai pour les explications toute à l'heure.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par s_a_m Voir le message
    Oh que si.
    Au fait j'ai créé un exemple que tu dois supprimer et remplacer par ta table table1
    Ca ne fonctionne pas dans le sens où à priori la table obtenue n'a pas les variables que je voulais avec les formats désirés (mais il n'y a pas d'errors quand on exécute les programmes)

    Mais j'avoue que je suis assez largué c'est clair...

    Citation Envoyé par s_a_m Voir le message
    puis j'ai essayé de t'expliquer {par le code} que la proc format ne fait que formater les donner.
    Je reviendrai pour les explications toute à l'heure.
    En tout cas merci pour ta patience !

  18. #18
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Je t'ai promis des explications , les voici:
    supporsons que t'as une table qui s'appel table1 ( moi je vais la créer, toi il est supposé que tu l'as déjà donc cette étape est à zaper).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DATA table1;
     
     input sexeinit $20.;
     cards;
    homme
    femme
    indéterminé
    masculin
    féminin
     ;
     run;
    Première étape ; création des formats. Attention !! il faut respecter le format des données( majuscule, minuscule,espace, …) car les traitements sur les données sont case sensitives.
    dans la proc format qui suit, toutes les valeurs commencent par une lettre majuscule. Celà dit : Féminin est différent de féminin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    proc format;
    value $ sex
    "Indéterminé"=0
    "Masculin" =1    
    "Féminin"=2
    other=.
    ;
    run;
    2 éme étape, appliquer le format. avec la fonction PUT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DATA table2;
    length sexe 3;
    SET table1;
    /* Attention !! la fonction propcase met en majuscule la première lettre*/ 
    sexe= put(propcase(sexeinit),sex.);
     
    run;
    maintenant, si tu veux du sur mesure donne un exemple de ta table.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Ok, ce n'est pas un problème de casse, toutes les valeurs ont des majuscules au début donc j'en ai tenu compte dans le format. Je te met le tout : création de la table et du format pour commencer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DATA table;
    	ATTRIB cle LABEL = "Clé" FORMAT = 11.;
    	ATTRIB sexeinit LABEL = "Sexe" FORMAT = $11.;
    	INFILE "&table\table.csv" FIRSTOBS = 2 DLM = ";" DSD MISSOVER;
    	INPUT cle sexeinit;
    RUN;
     
    PROC FORMAT;
    	VALUE $ sex
    		"Homme" = 1
    		"Femme" = 2
    		"Indéterminé" = 0
    		other = 0;
    RUN;
    La table est bien importée, les valeurs sont là (avec majuscule au début), le format est dans la library.
    Ensuite je fais la seconde partie, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DATA table;
    	LENGTH sexe 3;
    	SET table;
    	sexe = put (sexinit, sex.);
    RUN;
    Là log me resort ça :

    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
    3914
    3915  DATA table;
    3916      LENGTH sexe 3;
    3917      SET table;
    3918      sexe = put (sexinit, sex.);
                                   ----
                                   48
    ERROR 48-59: The format SEX was not found or could not be
                 loaded.
     
    3919  RUN;
     
    NOTE: Character values have been converted to numeric
          values at the places given by: (Line):(Column).
          3918:12
    NOTE: The SAS System stopped processing this step because of
          errors.
    WARNING: The data set WORK.TABLE may be incomplete.  When this
             step was stopped there were 0 observations and 4
             variables.
    WARNING: Data set WORK.TABLE was not replaced because this step
             was stopped.
    NOTE: DATA statement used (Total process time):
          real time           0.00 seconds
          cpu time            0.00 seconds

  20. #20
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ERROR 48-59: The format SEX was NOT found OR could NOT be
                 loaded.
     
    3919  RUN;
    SAS te dit que le format SEX n'existe pas. Comment t'as défini tes formats?
    Avec une proc format?
    Des formats stockés quelque part ?
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreur encodage lors de l'importation d'un fichier CSV
    Par mrbrams dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 15/06/2015, 11h36
  2. [AC-2003] Décalage des champs lors de l'importation d'un fichier CSV
    Par Alsvghn dans le forum Modélisation
    Réponses: 1
    Dernier message: 28/08/2013, 12h11
  3. Réponses: 2
    Dernier message: 20/04/2012, 09h24
  4. Réponses: 3
    Dernier message: 07/06/2011, 14h50
  5. pb de convertion de format lors d'un import
    Par Anaxagore dans le forum VBA Access
    Réponses: 4
    Dernier message: 12/11/2010, 10h17

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