Annonce

Bienvenue sur le site support de mes ouvrages d'introduction à SAS

La 4ème édition de mon ouvrage est disponible depuis le 11 avril 2019 !

Où trouver cet ouvrage ?


#1 29-02-2012 07:30:47

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

[archive] Encore une table compliquée..."industrialisons"...

Décidément, c'est un festival de tables compliquées à construire à partir d'un fichier TXT en ce moment !

Fatou, lectrice attentive de www.sas-sr.com m'a contacté pour me faire part de son désespoir ;-)

elle dispose d'un fichier TXT assez particulier : celui-ci ne fait qu'une seule ligne.

Bon, les lecteurs de mon ouvrage connaissent déjà l'option qu'il faut utiliser pour traiter ce genre de fichier et Fatou aussi bien entendu.

Mais il y a une seconde caractéristique : les différents champs correspondant aux différentes variables ne sont pas forcément séparés par des espaces (ou un délimiteur quelconque) et des espaces peuvent aussi être présents dans un champ : si ce fichier peut être transformé en une table SAS, il faut alors nécessairement que les champs soit délimités par des colonnes (et c'est le cas).

En fait, si la structure du fichier TXT avait été une ligne pour une observation, vous auriez eu des données formatées en colonnes.

Elle me précise aussi que chaque observation est systématiquement présentée sur 2845 caractères : les informations relatives à la première observation sont présentées entre la colonne 1 et la colonne 2845, celles relatives à la seconde observation débutent en colonne 2846.

Fatou a alors rédigé ce programme (qui ne fonctionne pas hélas !) :

Code:

data temp;
infile "C:\Users\Sebastien\Documents\exemple3.txt" LRECL=10000;
input 
X1 $ 1-17
X2 $ 18-36
X3 $ 37-46
X4 $ 49-53
X5 $ 54-64
X6 $ 65-69
X7 $ 97-100
X8 $ 101-103
X9 $ 104-106
X10 $ 107-108
X11 $ 109-112
X12 $ 113-118
X13 $ 119-128
X14 $ 129-136
X15 $ 137-146
X16 $ 147-154
X17  155-170
X18 $ 171-173
X19 $ 174-174
X20 $ 175-190
X21 $ 191-193
X22 $ 194-194
X23 $ 195-197
X24 $ 198-199
X25 $ 200-202
X26 $ 203-205
X27 $ 210-225
X28 $ 226-235
X29 $ 236-243
X30 $ 253-256
X31 $ 309-314
X32 $ 315-318
X33 $ 319-320
X34 $ 321-331
X35 $ 332-342
X36 $ 343-345
X37 $ 346-351
X38 $ 372-382
X39 $ 383-386
X40 $ 387-394
X41 $ 401-401
X42 $ 402-403
X43 $ 415-430
X44 $ 431-446
X45 $ 447-462
X46 $ 463-478
X47 $ 479-494
X48 $ 527-529
X49 $ 535-535
X50 $ 559-559
X51 $ 560-561
X52 $ 599-613
X53 $ 614-653
X54 $ 655-666
X55 $ 667-669
X56 $ 695-696
X57 $ 697-697
X58 $ 727-740
X59 $ 741-742
X60 $ 743-744
X61 $ 745-745
X62 $ 795-796
X63 $ 809-840
X64 $ 929-932
X65 $ 941-941
X66 $ 942-944
X67 $ 954-954
X68 $ 955-956
X69 $ 957-957
X70 $ 989-990
X71 $ 1034-1073
X72 $ 1715-1716
X73 $ 1816-1818
X74 $ 2517-2517
X75 $ 2518-2518 @@ ;
run ;

Les données peuvent être téléchargées ici (3 observations dans ce fichier anonymisé)

et si vous exécutez ce programme, vous constatez qu'il ne s'arrête jamais...

première question : pourquoi ?

et seconde question : Le programme de Fatou aurait parfaitement fonctionné si on avait eu une observation par enregistrement (en retirant bien sûr le @@). Modifiez son programme pour l'adapter au fait qu'il n'y a qu'un seul enregistrement.

vous obtiendrez une table correcte lorsque, en exécutant le programme suivant :

Code:

proc print ;
var x1 x2 x3;
run;

vous obtiendrez le résultat suivant :

Code:

Obs           x1                   x2               x3

 1     11111111111111111    ZZZZZZZZZZZZZZZZ    0000-00-00
 2     22222222222222222    ZZZZZZZZZZZZZZZZ    0000-00-00
 3     33333333333333333    ZZZZZZZZZZZZZZZZ    0000-00-00

Petit message à l'intention de Vincent - qui me sabote régulièrement (je plaisante !) mes beaux mercredis en proposant une solution toujours intéressante dans les heures qui suivent la mise en ligne de mes sujets ;-)

La solution est (presque) évidente. Maintenant, vous risquez de mettre des heures (si si...) à "caler" votre instruction INPUT (puisque tout se joue dans cette instruction).

Il vous faudra aussi réfléchir à une "industrialisation" de votre instruction INPUT... En fait, le programme que vous devez écrire pour construire une table correcte doit pouvoir être rédigé en moins de 5 minutes (et fonctionner à coup sûr) - vous aurez peut être besoin d'un autre (ou d'autres logiciels) pour vous aider à rédiger ce programme...

Il faudra bien entendu, en plus du programme, expliquer comment vous l'avez rédigé en quelques minutes...

amusez vous bien

Ce sujet est maintenant archivé - seuls les utilisateurs inscrits de www.sas-sr.com peuvent consulter l'intégralité du sujet
pour vous identifier, suivez ce lien
pour vous inscrire, suivez ce lien

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS