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 17/11/2010, 16h43   #1
Invité de passage
 
Laurent
Inscription : octobre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Laurent

Informations forums :
Inscription : octobre 2010
Messages : 16
Points : 1
Points : 1
Par défaut Integration d'un fichier texte particulier sous SAS

Bonjour à tous,

J'ai un fichier de données de 600 000 lignes de cette forme en résumé :

100102..........................
200102..........................
210102..........................
300102..........................
310102..........................
400102..........................
410102...........................
420102............................
430102.............................
100103.............................
200103..............................
300103..............................
400103..............................
410103..............................
100104..............................
200104..............................
210104..............................
300104..............................
400104..............................
410104..............................
100105..............................

etc.


Pour vous expliquer, je travaille sur le fichier des accidents en Aquitaine.
Un accident est caractérisé par un ensemble de lignes de 10 à 4X avec dans cet ensemble un code_unite de 2 caracteres (3eme et 4eme car) et un numero_pv (5eme et 6eme car).
Sur la ligne commençant par 10 j'ai les caractéristiques de l'accident avec en particulier la date et l'heure.
Sur la ligne commençant par 20 ou 21 ou 22 etc., j'ai tout ce qui concerne le lieu de l'accident.
Sur la ligne commençant par 30 ou 31 ou 32 etc., j'ai tout ce qui désigne les véhicules impliqués dans l'accident.
Sur la ligne commençant par 40 ou 41 ou 42 etc., j'ai tout ce qui désigne les usagers impliqués dans l'accident.
Quand je repasse par une ligne commençant par 10, je passe ainsi à un autre accident et tout ce qui va avec.

J'ai intégré dans SAS ce fichier texte avec la méthode classique infile et input en créant 4 tables SAS suivant les caractères en début de ligne (10, 20, 30 etc.).

Le problème vient du fait que le fichier a été parfois mal rempli par les autorités policières et que je me retrouve parfois pour (un code_unite ET un numero_pv) unique avec 2 dates distinctes ce qui ne devrait pas arrivé.
Pour solutionner ça je dois ajouter la date et l'heure de l'accident et faire un identifiant unique de 14 car :
2 pour le code_unite, 2 pour le numero_pv, 6 pour la date et 4 pour l'heure.

J'aimerais que cet identifiant unique soit présent dans mes 4 tables SAS ou plutôt dans les 3 autres tables SAS hors "caractéristiques" où il y est déjà.
J'ai essayé avec l'instruction merge, de "fusionner" la table caractéristiques et la table lieux par exemple en essayant de rajouter la date et l'heure mais aux endroits où il y a 2 dates pour (un code_unite ET un numero_pv) il y a des erreurs.

J'ai commencé SAS depuis peu et là j'avoue que je vois pas de solution évidente donc je fais appel à vous les boss du SAS.

Merci d'avance
cortilolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h09   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 133
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 133
Points : 1 744
Points : 1 744
T'as essayé en créant une seule table au début (au lieu de 4) et en créant un identifiant unique pour l'accident?
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h58   #3
Invité de passage
 
Laurent
Inscription : octobre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Laurent

Informations forums :
Inscription : octobre 2010
Messages : 16
Points : 1
Points : 1
Non mais c'est effectivement ce qu'il faudrait peut-être faire.

Quoique je ne sais pas si ce sera facile après de faire des études sur des usagers ou des véhicules sans qu'ils soient clairement définis dans des Tables SAS propres.

Et puis pour être franc je ne sais pas comment faire en une seule table

je vous laisse ici en fichiers joints un fichier texte test et mon programme sas qui intègre le fichier texte dans SAS.

Merci d'essayer de m'aider en tout cas
Fichiers attachés
Type de fichier : zip test.zip (28,9 Ko, 5 affichages)
cortilolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 14h34   #4
Invité
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Bonjour, si tu cherches à créer une variable commune entre tes 4 tables; teste ce code ;



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
libname mabiblio 'C:\test';
   DATA mabiblio.lieux_200   mabiblio.vehicules_200   mabiblio.caracteristiques_200  mabiblio.usagers_200 ; 
   INFILE "c:\test.txt" ;
	input @1 code_ligne $2. @;
	/* prends toutes les lignes qui commencent par 2 en dizaine */	
	 						input @3 code_unite $7.
                                   @10 numero_pv $5.
                                    @15 numero_feuille $2.
                                    @17 etabli_par $1.
                                    @18 lettre_conventionnelle $1.
                                    @19 place_dans_vehicule $1.
                                    @20 responsable_presume $1.
                                    @21 categorie $1.
                                    @22 gravite $1.
                                    @29 csp $1.
                                    @30 sexe $1.
                                    @34 dept_pays $3.
                                    @37 mois_naissance $2.
                                    @39 annee_naissance $4.
                                    @43 facteur_lie_a_lusager $1.
                                    @44 alcoolemie $1.
                                    @45 tx_alcoolemie $3.
                                    @48 permis_conduire $1.
                                    @49 mois_date_obtention_permis $2.
                                    @51 annee_date_obtention_permis $2.
                                    @53 trajet $1.
                                    @54 premiere_infraction $5.
				    @59 deuxieme_infraction $5.	
				   @64 equipement_securite $1.	
				   @65 utilisation_equipement_securite $1.	
				   @66 localisation_pieton $1.	
                                   @67 action_pieton $1.
				   @68 nbre_pieton $1.
                                   @73 depistage_drogue $1.
                                   @74 prise_sang $1
                                    .
                                    .
                                    .
                                    . /*saisie  toutes tes colonnes */ 
 
                                    ;
                                     /*new var = la variable communne entre tes 4 tables*/
			IF substr(code_ligne ,1,1)='2' then do ;
                   new_var= substr(code_unite,1,2)!! substr(numero_pv,1,2) !! date_jour!!date_mois!!date_an!! heure!!munutes ;
                   output mabiblio.lieux_200 (keep=(ce que tu veux garder comme colonnes));
            End;
            IF substr(code_ligne ,1,1)='3' then do;
                   new_var= substr(code_unite,1,2)!! substr(numero_pv,1,2) !! date_jour!!date_mois!!date_an!! heure!!munutes ;
                   output mabiblio.vehicules_200(keep=(ce que tu veux garder comme colonnes));
            End;
           IF substr(code_ligne ,1,1)='4' then do;
                   new_var= substr(code_unite,1,2)!! substr(numero_pv,1,2) !! date_jour!!date_mois!!date_an!! heure!!munutes ;
                    output mabiblio.usagers_200(keep=(ce que tu veux garder comme colonnes));
            End;
           IF code_ligne="10"             then do;
                   new_var= substr(code_unite,1,2)!! substr(numero_pv,1,2) !! date_jour!!date_mois!!date_an!! heure!!munutes ;
 
                   output mabiblio.caracteristiques_200(keep=(ce que tu veux garder comme colonnes));
            End;
 
                      run;

Dernière modification par fafabzh6 ; 19/11/2010 à 09h52. Motif: Suppression citation
  Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 09h10   #5
Invité de passage
 
Laurent
Inscription : octobre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Laurent

Informations forums :
Inscription : octobre 2010
Messages : 16
Points : 1
Points : 1
Bonjour rose et merci de ton aide.

En fait dans ton code proposé tu me dis de remplir toutes les colonnes mais je ne comprends pas comment faire puisque les noms de colonnes changent suivant que la ligne commence par 10, 20 ou autres, en tout cas à partir du caractère 18.

Par exemple dans la table caractéristiques, les car 18 et 19 donnent la colonne date_jour mais dans la table lieux le car 18 donne le code route, dans les tables véhicules et usagers le car 18 donne la lettre_conventionnelle.

En bref dans mon input je peux pas mettre :
Code :
1
2
3
@18 date_jour $2
@18 code_route $1
@18 lettre_conventionnelle $1
non? ou alors j'ai pas compris la finalité de ton code ce qui est possible aussi
cortilolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 09h41   #6
Invité
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
bonjour ;
si si tu peux;
voici un exemple et tu l'adaptes:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
libname mabiblio 'C:\test';
   DATA mabiblio.lieux_200   mabiblio.vehicules_200   mabiblio.caracteristiques_200  mabiblio.usagers_200 ; 
   INFILE "c:\test.txt" ;
	input @1 code_ligne $2. @;
 	/* prends toutes les lignes qui commencent par 2 en dizaine */
	 	 input @3 code_unite $7.
                                   @10 numero_pv $5.
                                    @15 numero_feuille $2.
                                    @17 etabli_par $1.
     @18 lettre_conventionnelle $1. /*ici je lis le même enregistrement 1 fois*/
     @18 date_jour $2 /*ici je lis le même enregistrement 2 fois*/
     @18 code_route $1 /*ici je lis le même enregistrement 3 fois*/
                                   @19 place_dans_vehicule $1. 
                                    @20 responsable_presume $1.

Julie.

Dernière modification par fafabzh6 ; 19/11/2010 à 09h53. Motif: Suppression citation
  Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 15h11   #7
Invité de passage
 
Laurent
Inscription : octobre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Laurent

Informations forums :
Inscription : octobre 2010
Messages : 16
Points : 1
Points : 1
Wow ce serait énorme, je vais tester ça évidemment
cortilolo 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 17h52.


 
 
 
 
Partenaires

Hébergement Web