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 20/10/2011, 14h47   #1
Nouveau Membre du Club
 
Inscription : novembre 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 84
Points : 36
Points : 36
Par défaut Import d'observations sur 1 ou plusieurs lignes

Bonjour,

On m'a filé un fichier texte à importer sous SAS. Ce fichier contient les noms des variables en première ligne => OK et les données sur les lignes suivantes.
Le hic est que dans ce fichier texte, les observations sont sur 1 ou plusieurs lignes. Le fichier est trop gros (8 000 000 lignes) pour le retraiter à la main.

Exemple :
ID Nom Prénom Age Lieu
1 Nom1 Prenom1 28 Ici
2 Nom2 Prenom2
45 Là
3 Nom3 Prenom3 12
Là-bas
...

La table SAS visée est telle que :
ID Nom Prénom Age Lieu
1 Nom1 Prenom1 28 Ici
2 Nom2 Prenom2 45 Là
3 Nom3 Prenom3 12 Là-bas
...

Savez vous s'il y a une option dans une procédure data qui permet cela où si vous avez une idée de contournement ...

Merci !
Dr Byby'San est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h16   #2
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 828
Points : 2 828
C'est ce que SAS fait par défaut avec INFILE / INPUT si on n'indique pas d'option MISSOVER. MISSOVER interdit justement d'aller compléter à la ligne suivante une observation qui ne contient pas autant de valeurs que prévu.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h20   #3
Nouveau Membre du Club
 
Inscription : novembre 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 84
Points : 36
Points : 36
Bah c'est qu'il y a un soucis dans mon code alors ...

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
DATA WORK.contact;
    LENGTH
        co_id            $ 40
        tc_id            $ 40
        oc_id            $ 40
        cf_id            $ 40
        co_code          $ 31
        co_denomination  $ 51
        co_nom           $ 31
        co_prenom        $ 31
        co_adresse       $ 101
        co_code_postal   $ 15
        co_ville         $ 31
        co_cedex         $ 11
        co_tel_dom       $ 26
        co_tel_bur       $ 26
        co_telecopie     $ 26
        co_email         $ 351
        co_no_compte     $ 41
        co_client        $ 12
        co_exploitant    $ 14
        co_fournisseur   $ 15
        co_commentaire   $ 1001
        co_pays          $ 31
        co_avoir         $ 40
        co_commercial    $ 14
        co_nom_tiers     $ 201
        co_exporte       $ 24
        tit_id           $ 40
        co_passwd        $ 31
        co_duree_recep_acompte $ 23
        co_duree_recep_solde $ 21
        co_tel_service_proprietaire $ 28
        co_langue        $ 12
        co_abonne_news   $ 15
        ent_id           $ 40
        co_login         $ 51
        co_logo          $ 256
        co_region_ce     $ 13
        tv_id_defaut     $ 40
        co_num_cgos      $ 31
        co_type_contrat  $ 81
        co_nom_tiers_proprio $ 51
        phonex_co_nom    $ 40
        phonex_co_prenom $ 40
        oco_id           $ 40
        co_news_papier   $ 15
        co_abonne_relance $ 18
        co_langue_parlee $ 40
        co_rcs           $ 31
        co_tva           $ 31
        co_soc_gestion   $ 15
        tce_id           $ 40
        co_ce_mere       $ 12
        co_npai          $ 12
        oco_id_encours   $ 40
        assu_id          $ 40
        co_duree_option  $ 16
        pays_id_nationalite $ 40
        co_actguid       $ 37
        co_num_camif     $ 21
        co_login_openlink $ 18
        co_tel_portable  $ 26
        co_type_contrat_internet $ 25
        co_type_contrat_espace_pro $ 27
        rco_nom          $ 101
        tce_nom          $ 255 ;
    FORMAT
        co_id            $CHAR40.
        tc_id            $CHAR40.
        oc_id            $CHAR40.
        cf_id            $CHAR40.
        co_code          $CHAR31.
        co_denomination  $CHAR51.
        co_nom           $CHAR31.
        co_prenom        $CHAR31.
        co_adresse       $CHAR101.
        co_code_postal   $CHAR15.
        co_ville         $CHAR31.
        co_cedex         $CHAR11.
        co_tel_dom       $CHAR26.
        co_tel_bur       $CHAR26.
        co_telecopie     $CHAR26.
        co_email         $CHAR351.
        co_no_compte     $CHAR41.
        co_client        $CHAR12.
        co_exploitant    $CHAR14.
        co_fournisseur   $CHAR15.
        co_commentaire   $CHAR1001.
        co_pays          $CHAR31.
        co_avoir         $CHAR40.
        co_commercial    $CHAR14.
        co_nom_tiers     $CHAR201.
        co_exporte       $CHAR24.
        tit_id           $CHAR40.
        co_passwd        $CHAR31.
        co_duree_recep_acompte $CHAR23.
        co_duree_recep_solde $CHAR21.
        co_tel_service_proprietaire $CHAR28.
        co_langue        $CHAR12.
        co_abonne_news   $CHAR15.
        ent_id           $CHAR40.
        co_login         $CHAR51.
        co_logo          $CHAR256.
        co_region_ce     $CHAR13.
        tv_id_defaut     $CHAR40.
        co_num_cgos      $CHAR31.
        co_type_contrat  $CHAR81.
        co_nom_tiers_proprio $CHAR51.
        phonex_co_nom    $CHAR40.
        phonex_co_prenom $CHAR40.
        oco_id           $CHAR40.
        co_news_papier   $CHAR15.
        co_abonne_relance $CHAR18.
        co_langue_parlee $CHAR40.
        co_rcs           $CHAR31.
        co_tva           $CHAR31.
        co_soc_gestion   $CHAR15.
        tce_id           $CHAR40.
        co_ce_mere       $CHAR12.
        co_npai          $CHAR12.
        oco_id_encours   $CHAR40.
        assu_id          $CHAR40.
        co_duree_option  $CHAR16.
        pays_id_nationalite $CHAR40.
        co_actguid       $CHAR37.
        co_num_camif     $CHAR21.
        co_login_openlink $CHAR18.
        co_tel_portable  $CHAR26.
        co_type_contrat_internet $CHAR25.
        co_type_contrat_espace_pro $CHAR27.
        rco_nom          $CHAR101.
        tce_nom          $CHAR255. ;
    INFORMAT
        co_id            $CHAR40.
        tc_id            $CHAR40.
        oc_id            $CHAR40.
        cf_id            $CHAR40.
        co_code          $CHAR31.
        co_denomination  $CHAR51.
        co_nom           $CHAR31.
        co_prenom        $CHAR31.
        co_adresse       $CHAR101.
        co_code_postal   $CHAR15.
        co_ville         $CHAR31.
        co_cedex         $CHAR11.
        co_tel_dom       $CHAR26.
        co_tel_bur       $CHAR26.
        co_telecopie     $CHAR26.
        co_email         $CHAR351.
        co_no_compte     $CHAR41.
        co_client        $CHAR12.
        co_exploitant    $CHAR14.
        co_fournisseur   $CHAR15.
        co_commentaire   $CHAR1001.
        co_pays          $CHAR31.
        co_avoir         $CHAR40.
        co_commercial    $CHAR14.
        co_nom_tiers     $CHAR201.
        co_exporte       $CHAR24.
        tit_id           $CHAR40.
        co_passwd        $CHAR31.
        co_duree_recep_acompte $CHAR23.
        co_duree_recep_solde $CHAR21.
        co_tel_service_proprietaire $CHAR28.
        co_langue        $CHAR12.
        co_abonne_news   $CHAR15.
        ent_id           $CHAR40.
        co_login         $CHAR51.
        co_logo          $CHAR256.
        co_region_ce     $CHAR13.
        tv_id_defaut     $CHAR40.
        co_num_cgos      $CHAR31.
        co_type_contrat  $CHAR81.
        co_nom_tiers_proprio $CHAR51.
        phonex_co_nom    $CHAR40.
        phonex_co_prenom $CHAR40.
        oco_id           $CHAR40.
        co_news_papier   $CHAR15.
        co_abonne_relance $CHAR18.
        co_langue_parlee $CHAR40.
        co_rcs           $CHAR31.
        co_tva           $CHAR31.
        co_soc_gestion   $CHAR15.
        tce_id           $CHAR40.
        co_ce_mere       $CHAR12.
        co_npai          $CHAR12.
        oco_id_encours   $CHAR40.
        assu_id          $CHAR40.
        co_duree_option  $CHAR16.
        pays_id_nationalite $CHAR40.
        co_actguid       $CHAR37.
        co_num_camif     $CHAR21.
        co_login_openlink $CHAR18.
        co_tel_portable  $CHAR26.
        co_type_contrat_internet $CHAR25.
        co_type_contrat_espace_pro $CHAR27.
        rco_nom          $CHAR101.
        tce_nom          $CHAR255. ;
    INFILE 'E:\Contact.txt'
        LRECL=3756
        ENCODING="utf-16le"
        TERMSTR=CRLF FIRSTOBS=3 TRUNCOVER;
    INPUT
        @1     co_id            $CHAR40.
        @41    tc_id            $CHAR40.
        @81    oc_id            $CHAR40.
        @121   cf_id            $CHAR40.
        @161   co_code          $CHAR31.
        @192   co_denomination  $CHAR51.
        @243   co_nom           $CHAR31.
        @274   co_prenom        $CHAR31.
        @305   co_adresse       $CHAR101.
        @406   co_code_postal   $CHAR15.
        @421   co_ville         $CHAR31.
        @452   co_cedex         $CHAR11.
        @463   co_tel_dom       $CHAR26.
        @489   co_tel_bur       $CHAR26.
        @515   co_telecopie     $CHAR26.
        @541   co_email         $CHAR351.
        @892   co_no_compte     $CHAR41.
        @933   co_client        $CHAR12.
        @945   co_exploitant    $CHAR14.
        @959   co_fournisseur   $CHAR15.
        @974   co_commentaire   $CHAR1001.
        @1975  co_pays          $CHAR31.
        @2006  co_avoir         $CHAR40.
        @2046  co_commercial    $CHAR14.
        @2060  co_nom_tiers     $CHAR201.
        @2261  co_exporte       $CHAR24.
        @2285  tit_id           $CHAR40.
        @2325  co_passwd        $CHAR31.
        @2356  co_duree_recep_acompte $CHAR23.
        @2379  co_duree_recep_solde $CHAR21.
        @2400  co_tel_service_proprietaire $CHAR28.
        @2428  co_langue        $CHAR12.
        @2440  co_abonne_news   $CHAR15.
        @2455  ent_id           $CHAR40.
        @2495  co_login         $CHAR51.
        @2546  co_logo          $CHAR256.
        @2802  co_region_ce     $CHAR13.
        @2815  tv_id_defaut     $CHAR40.
        @2855  co_num_cgos      $CHAR31.
        @2886  co_type_contrat  $CHAR81.
        @2967  co_nom_tiers_proprio $CHAR51.
        @3018  phonex_co_nom    $CHAR40.
        @3058  phonex_co_prenom $CHAR40.
        @3098  oco_id           $CHAR40.
        @3138  co_news_papier   $CHAR15.
        @3153  co_abonne_relance $CHAR18.
        @3171  co_langue_parlee $CHAR40.
        @3211  co_rcs           $CHAR31.
        @3242  co_tva           $CHAR31.
        @3273  co_soc_gestion   $CHAR15.
        @3288  tce_id           $CHAR40.
        @3328  co_ce_mere       $CHAR12.
        @3340  co_npai          $CHAR12.
        @3352  oco_id_encours   $CHAR40.
        @3392  assu_id          $CHAR40.
        @3432  co_duree_option  $CHAR16.
        @3448  pays_id_nationalite $CHAR40.
        @3488  co_actguid       $CHAR37.
        @3525  co_num_camif     $CHAR21.
        @3546  co_login_openlink $CHAR18.
        @3564  co_tel_portable  $CHAR26.
        @3590  co_type_contrat_internet $CHAR25.
        @3615  co_type_contrat_espace_pro $CHAR27.
        @3642  rco_nom          $CHAR101.
        @3743  tce_nom          $CHAR255. ;
RUN;
Mais je vois pas où ...
Dr Byby'San est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h25   #4
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 828
Points : 2 828
Enlève aussi le TRUNCOVER pour voir.
Mais je n'imaginais pas que ça serait un fichier colonné, je voyais un fichier à séparateurs. D'ordinaire, les fichiers colonnés ne reviennent pas à ligne quand ça leur chante...
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h53   #5
Nouveau Membre du Club
 
Inscription : novembre 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 84
Points : 36
Points : 36
Il me fait sauter des observations (en gros une sur deux).
Pour les observations sur deux lignes, il me ramène la seconde ligne sur la première, mais il m'écrase la dernière variable qui était convenablement remplie ... Là où l'adresse était OK avec TRUNCOVER, le contenu de cette variable a été remplacé par le contenu des variables suivantes.
Dr Byby'San est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 17h49   #6
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 828
Points : 2 828
C'est cette organisation en colonnes qui pourrit tout ! Si ton fichier était avec des séparateurs, ça irait tout seul.
Ce qu'on pourrait tenter, ce serait un travail en 2 temps :
Code :
1
2
INFILE blabla ;
INPUT @ ;
Tu alimentes alors une variable temporaire, _INFILE_, qui contient ta ligne à importer. Selon sa longueur (tester avec LENGTH) tu peux peut-être deviner si elle est complète ou si elle déborde sur la ligne suivante. En fonction (avec un IF) tu peux brancher ton INPUT normal ou une version qui lit sur 2 lignes (avec un / tu indiques la ligne qui suit. Genre :
Code :
1
2
IF LENGTH(_infile_) > 100 /* ligne "complète" THEN INPUT ... ;
ELSE INPUT ... / @1 ... ;
En espérant que ça fonctionne !
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 15h42   #7
Nouveau Membre du Club
 
Inscription : novembre 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 84
Points : 36
Points : 36
L'idée est très bonne en effet.

Je l'ai testé et il me manque des enregistrements (qui pourtant sont complets), certains sont incomplets, d'autres vides ... Globalement, le rendu est plus propre mais cela ne me donne pas la table finale.

Ayant pas mal de variables dans mon input, et donc pas mal de cas à traiter avec le IF ... je ne peux mettre cette méthode en application. Avec 4 ou 5 variables ca l'aurait fait certainement.

Je vais voir si on peut me refournir une table plus propre ou si j'arrive à faire quelque avec un editeur de texte genre ultraedit pour améliorer la chose.

Merci du coup de main !
Dr Byby'San est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 15h50   #8
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 716
Points : 1 716
Hello,
peux tu poseter quelques lignes de ton fichier ( incluant les lignes qui posent problème) et le programme utilisé?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 16h04   #9
Nouveau Membre du Club
 
Inscription : novembre 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 84
Points : 36
Points : 36
Comme c'est une table de contact, il y a des données "sensibles" (noms, numéros de téléphone, ...) dedans, c'est moyen de la publier sur le net. Et anonymiser une soixantaine de variable sur une dizaine d'observations me botte moyen et ne serait du coup pas forcément représentatif du fichier.

Merci de coup de main quand même !
Dr Byby'San 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 16h32.


 
 
 
 
Partenaires

Hébergement Web