|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 212 ![]() |
Je dois récupérer un fichier sas qui a une forme un peu particulière...
Une partie des variables se trouvent en colonne, et une partie se trouve en ligne, enfin je vous donne un exemple avec des données complètements factices. Code :
Code :
Alors bien sur après de nombreuses manipulations de table a on doit pouvoir y arriver. Ma question est, afin d'éviter une programmation complexe de la nature de celle que je me proposais de faire (et que j'ai bien du mal à démarrer), y aurait il un moyen de "décrire" simplement à SAS la première table pour qu'il y retrouve facilement ses petits et créé simplement la seconde table à partir de la première ? J'espère que je me fais bien comprendre... Je met le code générant la premier table d'exemple Code :
|
||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Présenté comme ça, on sent le RETAIN et les conditions en SELECT/WHEN pour essayer de tout remettre d'aplomb. Un peu galère à écrire tout ça.
A tout prendre, j'enverrais le contenu de la table SAS dans un fichier plat, d'où ça doit provenir pour être aussi en vrac, et je réimporterais comme un fichier hiérarchique avec des INPUT ... @ ; sous conditions. Bon courage en tout cas ! Olivier |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 212 ![]() |
Merci Olivier,
la piste des fichiers hiérarchisés est bien celle que je présentais sauf que je n'ai pratiqué |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bon, voilà un petit canevas à adapter.
Par rapport à un vrai fichier hiérarchique, c'est ici plus simple si ton organisation est toujours la même pour un bloc d'une même entreprise (les infos sont toujours dans le même ordre et jamais répétées). Ici il suffit d'indiquer la longueur (nombre de lignes) d'un bloc avec un N= dans INFILE, et dans INPUT d'aller à la ligne suivante avec un /. J'ai repris ton exemple et ça donne Code :
|
||
|
|
00
|
|
|
#5 | ||||
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 212 ![]() |
Merci Olivier,
le problème c'est qu'il peut y avoir des valeurs manquante dans les variables et dans ce cas la ligne saute et certaines variables ne sont pas toutes présentes pour toutes les observations, ces deux choses font que le bloc a une longueur variable.Bon finalement j'ai fait un code qui me satisfait avec un nombre minimal de retain et reconnaissance automatique des variables "mal fichues", sauf pour le format des variables, mais vu mon problème initial c'est anecdotique et je ne m'arrête pas à ce problème de forme.... Ma solution reviens à préparer le fichier à "subir" une proc transpose ![]() Je copie l'identifiant sur toutes les lignes. Je fait passer les variables déclarées en ligne ( par exemple pour effectif=6 je l'écris en ligne var='effectif' modalite='6' ) Pour les autres variables, dès que j'en repère une dans une parenthèse je cherche la modalité comme étant la première valeur de texte non vide avant la variable suivante. Lorsque je repère une modalité isolé dans la variable texte (c'est à dire sans déclaration de variable préalable) je la glisse dans var1 puis var2 si il y en a une deuxième, puis var3 etc... A la fin je supprime tout les ligne avec la variable modalite à vide. Et je transpose... Tout cela marche bien aussi parce que mes variables "non déclarées", c'est à dire celles qui vont se retrouver renommées en var1,var2 etc.. sont toutes sans valeurs manquantes, sinon je ne serais pas sorti de l'auberge. Bon finalement ça a été moins douloureux que je ne l'imaginais. voici le code Code :
et le résultat Code :
Et merci pour ton exemple de lecture de fichier hiérarchisé, j'ai vu assez peu de doc sur internet à ce sujet , je pense que cela pourra servir à d'autres, d'ailleurs je ne sais pas quelle est la traduction de "fichiers hiérarchisés" en anglais donc pour trouver dans la doc SAS anglophone
|
||||
|
|
00
|
|
|
#6 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Hello,
les option missover et DSD ne peuvent pas t'aider pour gerer les valeurs manquantes? |
|
|
00
|
|
|
#7 | ||||||||||
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 212 ![]() |
mon code précédent était erroné à cause de la macro variable &i (je n'arrive pas à faire ce que je voulais faire avec elle) donc je suis passé à une variable "simple" i accompagnée d'un retain
Code :
Code :
Code :
Peut être que msd et missover seraient la solution il va falloir que je me penche sur le sujet de toute façon. Edit : j'ai encore modifié la ligne Code :
Code :
Re-Edit : Après avoir pris connaissance des fonctionnalités de DSD et MISSOVER, les problèmes créés par les valeurs manquantes (suppression de la ligne concernant la modalité, donc par exemple si le chiffre d'affaire est manquant, on va passer de "Chiffre d'affaire (CA)" à la ligne suivante qui sera la variable d'introduction de la date "date (date)") vont faire que ça risque de ne pas bien se passer Merci à vous deux ! |
||||||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com