Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/02/2011, 10h03   #1
Invité de passage
 
Inscription : février 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 22
Points : 0
Points : 0
Par défaut Import d'un fichier CSV : création compteur du nombre de delimiteurs (tabulations)

Bonjour

Voila je seche depuis quelques jours sur une problématique.Je viens vers vous dans l'espoir qu'une personne puisse me venir en aide.

Je dois importer un fichier csv le delimiteur est une tabulation.
Cependant certains champs qui doivent etre importés comportent des tabulations .Ceci entraine des decallages et des erreurs lors de l'import.

Je m'etais dis qu'il serait judicieux lors de l'import de créer une variable qui compterait le nombre de delimiteur (Nombre de tabulation par ligne) afin d'isoler les observations avec un nombre de délimiteur superieur à ce qui est effectivement attendu.

je ne sais pas si je suis suffisament claire.

Si quelqu'un à une idée je suis preneur

merci d'avance
Ondine_sas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h20   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 701
Points : 1 701
Citation:
Envoyé par Ondine_sas Voir le message
Bonjour

Voila je seche depuis quelques jours sur une problématique.Je viens vers vous dans l'espoir qu'une personne puisse me venir en aide.

Je dois importer un fichier csv le delimiteur est une tabulation.
Cependant certains champs qui doivent etre importés comportent des tabulations .Ceci entraine des decallages et des erreurs lors de l'import.

Je m'etais dis qu'il serait judicieux lors de l'import de créer une variable qui compterait le nombre de delimiteur (Nombre de tabulation par ligne) afin d'isoler les observations avec un nombre de délimiteur superieur à ce qui est effectivement attendu.

je ne sais pas si je suis suffisament claire.

Si quelqu'un à une idée je suis preneur

merci d'avance
Bonjour ;
ru peux joindre le LOG et un extrait de ton ficher CSV ? il se peut que c'est la longueur de ligne c'est à dire le LRECL ( s'il dépasse 256 et que toi tu n'as pas spécifié sa à SAS ) les données seront trunquées. Où peut être d'autres erreurs
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h38   #3
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Bonjour Ondine.
Ce que tu peux faire, c'est une instruction INPUT @ ; qui va charger la ligne de données dans une variable temporaire (appelée _INFILE_) de type caractère. Ensuite tu calcules le nombre de tabulations dans cette variable (avec la fonction COUNT si tu es en v9).
Ci-dessous un exemple de la syntaxe avec des données saisies (DATALINES) et un séparateur virgule. A toi d'adapter !
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DATA work.import_ok (DROP=valeur)
     work.anomalies (KEEP=ligne valeur);
  INFILE CARDS DLM="," MISSOVER DSD ;
  ligne = _N_ ;
  INPUT @ ;
  IF COUNT(_INFILE_,",")>2 THEN DO ;
	PUTLOG "la ligne " _N_ " comporte des séparateurs surnuméraires et ne sera pas importée" ;
	INPUT ; /* on libère la ligne */
	valeur = _INFILE_ ;
	OUTPUT work.anomalies ;
  END ;
  ELSE DO ;
    INPUT var1 $ var2 $ var3 $ ;
	OUTPUT work.import_ok ; /* on importe et on sauvegarde dans la table en sortie */
  END ;
DATALINES ;
a,b,c
c,,,d,e
a,b
e,,c,e
;
RUN ;
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/02/2011, 11h58   #4
Invité de passage
 
Inscription : février 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 22
Points : 0
Points : 0
Bonjour

Tout a d'abord merci de m'avoir repondu aussi rapidement c'est vraiment sympa.

Olivier il semblerait que se soit exactement ce dont j'ai besoin.
Je test le code et reviens vers toi si tout est OK.

merci encore
Ondine_sas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 13h59   #5
Invité de passage
 
Inscription : février 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 22
Points : 0
Points : 0
Par défaut Merci

Merci bcp Olivier

Ca marche nikel

Bonne journée et merci encore
Ondine_sas est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h09.


 
 
 
 
Partenaires

Hébergement Web