Vous n'êtes pas identifié.
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 !
Pages: 1
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 !) :
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 :
proc print ; var x1 x2 x3; run;
vous obtiendrez le résultat suivant :
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
Pages: 1