Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
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 21/04/2011, 15h49   #1
Nouveau Membre du Club
 
Homme Gaëtan
Inscription : avril 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 29
Points : 26
Points : 26
Par défaut MàJ d'un fichier plat

Bonjour,

j'ai un petit souci, j'ai créé un fichier plat avgec séparateur ";" le souci c que maintenant je me rend compte qu'une colonne est vide.
j'ai donc utilisé le code suivant pour modifier la valeur :
Code :
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
DATA tutu;
   INFILE 'C:\User\...\test.dat' sharebuffers dlm=';' DSD firstobs = 2 missover;
   file 'C:\User\...\test.dat';
format  PD_ID	7.
        			PY_ID	$3.
        			PD_NO_MODELE	4.
        			PD_NO_SEGMENT	8.
        			PD_NO_ECHELLE	3.
        			PD_DT_DEBVAL	datetime16.
        			PD_DT_FINVAL	datetime16.	
        			PD_LB_ECHELLE	$50.
        			PD_VL_BORNINF	7.3
        			PD_VL_BORNSUP	7.3
        			PD_LGD_MIN		7.3
        			PD_LGD_MAX		7.3
        			PD_CRIT1		7.3
        			PD_CRIT2		7.3
        			PD_CRIT3		7.3
        			PD_CRIT4		7.3
        			PD_NBCRIT		1.
        			PD_DT_MAJ		DATEtime16.
        			PD_NO_VERSION	3.
        			PD_TM_VERSION	1. 
        			PD_TM_HORSB	1. ;
 
informat PD_ID 7.  
         PY_ID $3. 
         PD_NO_MODELE best32. 
         PD_NO_ECHELLE best32. 
         PD_NO_SEGMENT best32. 
         PD_DT_DEBVAL datetime16. 
         PD_DT_FINVAL datetime16. 
         PD_LB_ECHELLE $50. 
         PD_VL_BORNINF best32. 
         PD_VL_BORNSUP best32. 
         PD_LGD_MIN best32. 
         PD_LGD_MAX best32. 
         PD_CRIT1 1. 
         PD_CRIT2 1. 
         PD_CRIT3 1. 
         PD_CRIT4 1. 
         PD_NBCRIT best32. 
         PD_DT_MAJ datetime16. 
         PD_NO_VERSION best32. 
         PD_TM_VERSION best32. 
		PD_TM_HORSB	1. ;
input   PD_ID
        PY_ID $
        PD_NO_MODELE
        PD_NO_ECHELLE
        PD_NO_SEGMENT
        PD_DT_DEBVAL 
        PD_DT_FINVAL 
        PD_LB_ECHELLE $
        PD_VL_BORNINF 
        PD_VL_BORNSUP
        PD_LGD_MIN
        PD_LGD_MAX
        PD_CRIT1
        PD_CRIT2
        PD_CRIT3
        PD_CRIT4
        PD_NBCRIT
        PD_DT_MAJ 
        PD_NO_VERSION
        PD_TM_VERSION
        PD_TM_HORSB ; 
 
   IF PD_DT_MAJ=.  then
     PD_DT_MAJ='21APR11:00:00:00'dt;
   put PD_DT_MAJ ;
run;
quand je regarde ma table "tutu" elle est nickel mais quand j'ouvre mon fichier plat il me manque les 5 premières variables.
Je ne vois pas du tout d'où vient le problème donc si vous pouvez m'aider ça m'arrangerait.

Merci
boutchiwah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 15h54   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Y -a-il moyen de supprimer la colonne dans ton fichier source (puisqu'elle est vide)?
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 15h59   #3
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Je ne dirai pas que ça vient de là, mais ça sert à quoi d'avoir un file et infile en même temps. soit tu déclares ton filename en dehors de data et tu l'appelles en infile, soit un infile directement.
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 16h00   #4
Nouveau Membre du Club
 
Homme Gaëtan
Inscription : avril 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 29
Points : 26
Points : 26
le problème c'est qu'elle n'est pas totalement vide en fait ...
Mais en même temps c'est pas vraiment un problème de la supprimer non plus, elle n'a qu'une valeur qui est présente sur une dizaine de ligne donc je peux me débrouiller en utilisant des IF.

Mais si tu veux la supprimer directement dans le fichier source sans passer par SAS alors là non ce n'est pas possible...

@MEGAMIND2 :
le file et l'infile c pour mettre à jour mon fichier .dat. Je lance mon étape DATA est mon fichier est directement mis à jour
boutchiwah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 16h03   #5
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
si tu as des données je crois me souvenir qu'avec un misover et dsd l'import se passe bien..

Que dit a log?
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 16h07   #6
Nouveau Membre du Club
 
Homme Gaëtan
Inscription : avril 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 29
Points : 26
Points : 26
Je n'ai aucune erreur dans la log

Citation:
NOTE: Le fichier/l'infile 'C:\User\...\test.dat'
est :
Nom de fichier=C:\User\...\test.dat,
RECFM=V,LRECL=256

NOTE: 58 enregistrements lus dans infile 'C:\User\...\test.dat'.
La longueur min. de l'enregistrement était 93.
La longueur max. de l'enregistrement était 117.
NOTE: 58 enregistrements copiés dans le fichier 'C:\User\...\test.dat'.
La longueur min. de l'enregistrement était 93.
La longueur max. de l'enregistrement était 117.
NOTE: La table WORK.TUTU a 58 observations et 21 variables.
NOTE: L'étape DATA a utilisé (Durée totale du processus) :
temps réel 0.06 secondes
temps processeur 0.04 secondes

boutchiwah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 16h13   #7
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
Le souci avec SHAREBUFFERS c'est qu'on a bien la possibilité de mettre à jour le fichier, mais l'exemple de la doc SAS le montre : c'est surtout pensé pour des fichiers plats en colonnes, pas pour des séparateurs. Car il faut que la longueur de la ligne reste la même entre la lecture et l'écriture... ce qui n'est pas ton cas puisque tu veux remplacer des . par un nombre de plus d'1 chiffre.
La solution la plus immédiate ne serait-elle pas d'exporter tout simplement ta table TUTU une fois ton étape DATA terminée ?
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 16h19   #8
Nouveau Membre du Club
 
Homme Gaëtan
Inscription : avril 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 29
Points : 26
Points : 26
ah oui j'avais pas compris que ça marchait comme ça le SHAREBUFFERS.
Du coup je vais effectivement devoir faire un export, et moi qui pensais avoir trouver une bonne option de SAS, je suis déçu maintenant

En tout cas merci pour votre aide
boutchiwah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 16h36   #9
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
En tout cas c'est ce que je comprends de la doc et de mes essais.
Citation:
CAUTION:
When using SHAREBUFFERS, RECFM=V, and _INFILE_, use caution if you read a record with one length and update the file with a record of a different length.
The length of the record can change by modifying _INFILE_. One option to avoid this potential problem is to pad or truncate _INFILE_ so that the original record length is maintained.
Et plus j'essaye des trucs, plus les résultats sont étranges...
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 16h47   #10
Nouveau Membre du Club
 
Homme Gaëtan
Inscription : avril 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 29
Points : 26
Points : 26
oui, après ta réponse j'ai compris un peu mieux les choses.

Effectivement on dirait bien que ça utilise la longueur (ça m'apprendra à pas lire la doc en entier )
et si je comprend bien mon fichier en sortie,
lorsque tu fais comme moi et que tu mets seulement un à la fin de ton étape il te replace cette variable au début du fichier.
si j'ai bien vu dans la doc il faut lui indiquer l'emplacement auquel tu veux mettre ta variable bon après j'ai pas essayé plus compliqué, je n'utilise pas trop les fichiers à largeur fixe.
boutchiwah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web