|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() analyste de données Inscription : octobre 2011 Messages : 3 ![]() |
bonjour,
je dispose d'un fichier txt sur lequel est enregistré, sur une même ligne des variables les unes à la suite des autres. Mon souci est que la position de certaines variables est variable Je m'explique: Il y a trois types d'infos: le nombre d'unités médicale par lesquelles est passé la personne, le nombre de diag associés, le nombre d'actes. exemple si un patient est passé par 3 unités medicale, lors de son passage dans la premiere il y a eu 1 diag, 2 actes, dans la deuxieme, 1 diag et 1 acte et dans la troisieme 2 diag et 2 actes, les données seront saisies comme suit: unité 1 - unite 2 - unite 3 - diag 1 de l'unite 1 - diag 1 de l'unite 2 - diag 1 de l'unite 3 - diag 2 de l'unite 3 - acte 1 de l'unite 1 - acte 2 de l'unite 1 etc Pour extraire par exemple les actes (a la fin de la ligne) il faut donc trouver la position de départ qui change en fonction du nombre d'unites et d'actes j'ai tenté une macro du style Code :
comment faire ? je vous remercie par avance de vos conseils Arnaud |
||
|
|
00
|
|
|
#2 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
Quelle est l'erreur ?
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
00
|
|
|
#3 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 012 ![]() |
les noms des tables "g:\sas\rum";!!!!!
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Si je comprends bien ce code (il est vrai assez déroutant avec des chemins entre guillemets en guise de noms de table) il y a eu à un moment une organisation en colonne. D'où le SUBSTR pour aller capturer le morceau qui va bien.
Une étape DATA avec INFILE et INPUT orné de @ pour indiquer les numéros de colonnes, ou à la rigueur de + pour décaler le pointeur de lecture, serait sûrement un moyen plus simple (et sans macros) d'arriver à tes fins. Bon courage. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() analyste de données Inscription : octobre 2011 Messages : 3 ![]() |
tout d'abord merci à tous pour votre participation
le message d'erreur est le suivant: Code :
NOTE: Troisième argument non valide pour la fonction SUBSTR dans ligne 7 colonne 44. D'après ce que j'ai pu trouver comme infos il semblerait que ce message indique que la position et la longueur de la chaine que je souhaite extraire dépasse la longueur réelle de la variable. D'ou l'impossibilité technique de repondre à ma commande. La difficulte vient de ce que la position de départ de la chaine que je souhaite récupérer est variable. Je ne peux donc pas l'écrire avec une valeur fixe. De plus, les manuel d'utilisation de la fonction substr n’évoquent jamais la possibilité dans les paramètres de position et de longueur de chaine à prendre, de mettre une variable. Les exemples mettent tous des valeurs numeriques. Je ne sais donc pas si la fonction substr est la meilleure pour résoudre mon problème. Pour répondre à olivier.decourt il n'y a pas de colonne, c'est la tout le probleme. Les données sont saisies les unes à la suites des autres dans le fichier d'origine, c'est lors de l'import justement que ej dois creer les colonnes mais sachant que la position des variables que je souhaite recuperer ne sont pas fixes mais dependantes d'autres infos dans le fichier (que je peux récupérer elles sans souci). PS les guillemets sont necessaires pour travailler directement dans un répertoire qui n'est pas celui de travail par défaut merci a tous |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 957 ![]() |
Bonjour,
A mon avis il te manque %eval, exemple: Code :
n=substr(quit,%eval(&n+1),%eval(&a-1)) |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Citation:
Plus globalement Youdee, on peut parfaitement utiliser des variables SAS comme arguments de la fonction SUBSTR. Pas forcément des macro-variables, des vraies variables fonctionnent aussi. Quant à tes chemins entre guillemets, ils pourraient être centralisés sous forme d'une bibliothèque (instruction LIBNAME) qui indiquerait dans quel répertoire tu souhaites lire et écrire des données SAS. C'est plus courant que ton écriture avec des noms physiques, très rares en SAS sauf pour les fichiers à importer et exporter. Dernière chose : ta description ressemble à des données PMSI. C'est la seule forme sous laquelle tu les as ? Parce que dans la base PMSI les données sont plutôt sous la forme 1 ligne par diag, et pas tout à la suite sur 1 ligne par patient. Bon courage. Olivier |
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() analyste de données Inscription : octobre 2011 Messages : 3 ![]() |
Salut,
ce sont effectivement les données du PMSI. Le format que j'ai est celui qui est transmis aux établissements par le bias de l'ATIH. Les formats du type 1 ligne par Diag ont déjà été transformés. Retrouver un fichier de ce type est justement ce que je cherche à faire. Pour ce qui est de la fonction substr en fait oui les variables fonctionnent très bien. J'étais persuadé d'avoir déjà essayé c'est pourquoi je m'embarquais dans des choses compliquées. En re tantant suite aux conseils de olivier.decourt cela semble fonctionner. (Pour autant mon souci n'est pas résolu car je bataille avec le format de ce fichier texte qui décidément est mal adapté à des manipulations de ce genre). J'ai cependant un début de réponse Merci à tous et bonne continuation Arnaud |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com