|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2009 Messages : 74 ![]() |
Bonjour,
je ne connais vraiment pas grand chose au code sas. Extrait du code sas existant, permettant d'extraire les 12 dernières périodes : A noter que la période en entrée est de format 201101 pour janvier 2011. Code :
J'aimerais reprendre ce code pour extraire les 52 dernières périodes, maintenant mon format d'entrée étant 201113 : 13ème semaine de l'année 2011. Y'a-t-il un format pour cela? Comment créer à partir de rien un format? et comment l'utiliser? Merci de votre aide ! |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
hello, Je ne suis pas sûr d'avoir bien compris.
je te propose un extrait du SAS HELP. tu l'adapte à ton cas. Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
Je ne connais pas tout le contexte de ton probleme, mais pourquoi necessairement un format? Une simple boucle en mode macro pourrait egalement faire l'affaire...
|
|
|
00
|
|
|
#4 | |
|
Membre habitué
![]() Sébastien RinguedéInscription : janvier 2011 Messages : 61 ![]() |
Citation:
ce n'est pas un format dont tu as besoin mais un informat. le second argument de la fonction INPUT est en effet un informat et demande la lecture de la modalité 201101 au moyen de cet informat pour la transformer en une date qui pourra ensuite être manipulée par la fonction INTNX. tu peux appeler la variable qui contient 201101 date mais ce n'est pas une date aux yeux de SAS (une date, pour SAS, c'est un nombre de jours depuis le 1er janvier 1960). il n'y a vraiment pas de vraies dates dans ta table ? a+ Sébastien Ringuedé |
|
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2009 Messages : 74 ![]() |
J'ai voulu tricher en reprenant le code existant, mais je me rends compte que quand j'arrive à par exemple 201112, ça me renvoie 201001...
Finalement on va faire une nouvelle table en base et calculer les périodes nécessaires avec la partie etl (en datastage). En revanche j'ai un autre souci : Prenons toujours le même exemple : 201126 (26ème semaine de l'année 2011) Considérons que le premier jour de la semaine est un lundi et le dernier jour de la semaine le vendredi. Comment obtenir à partir de 201126 : du 27/06 au 01/07 ? J'ai pensé à faire une fonction qui dirait que 201101 est du 03/01 au 07/01 mais cela pose problème en fin de mois... Et si j'ai un historique de 10 ans cela va être encore plus gênant... Je pourrais aussi faire un tableau avec 52 lignes par an, mais avec 10 ans d'historique et les évolutions dans le temps cela ne me paraît pas envisageable... Comment obtenir à partir de ce format année-semaine, le premier et le dernier jour de cette semaine de cette année ? |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2009 Messages : 74 ![]() |
Malheureusement non... notre date est année-semaine, un format difficilement manipulable dans tous les sens.
à partir de cette date il va falloir S-1, S-4, S-12 et S-52, retrouver le mois auquel ça correspond, ... Nous allons essayer de faire ces calculs en amont. |
|
|
00
|
|
|
#7 | |
|
Membre habitué
![]() Sébastien RinguedéInscription : janvier 2011 Messages : 61 ![]() |
Citation:
la semaine du 27/06 (lundi dernier) - 01/07 (demain) c'est votre semaine 26 ? vous avec des semaines 0 dans certaines années ? des semaines 53 ? quelles années ? a+ Sébastien Ringuedé |
|
|
|
00
|
|
|
#8 | |
|
Nouveau Membre du Club
![]() Inscription : juillet 2009 Messages : 74 ![]() |
A priori, il n'y aura pas de semaine zéro.
En revanche, oui certainement il y aura des semaines 53. Nous n'avons pas encore de fichiers sources, on commence les développements avec les documents de conception. C'est moche, je sais... Citation:
Il y aura un historique de 10 ans, et il faudra aussi prendre en compte les années à venir. Donc prise en compte des années bisextiles. Je vais bien m'amuser pour me faire la main avec SAS ! |
|
|
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Gaëtan Inscription : avril 2011 Messages : 29 ![]() |
Sinon en SAS il y a un format pour ça.
En fait il y en a 3 : WEEKU WEEKV WEEKW La différence entre ces 3 formats c'est le choix du premier jour de la semaine, ce qui peut modifier le numéro de la semaine. |
|
|
00
|
|
|
#10 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
hello,
un petit tour dans la FAC SAS tu trouvera une piste. Maintenant il faut faire l'opération inverse et récupérer la date du numéro de la semaine. Bon courage. |
|
|
00
|
|
|
#11 | |
|
Membre habitué
![]() Sébastien RinguedéInscription : janvier 2011 Messages : 61 ![]() |
Citation:
Les informats WEEKU, WEEKV et WEEKW sont par contre à explorer sauf que pour l'instant, il n'y a pas de W entre l'année et la semaine... ça peut s'arranger... par contre, ces informats peuvent comprendre 03W01, pas 2003W01... a+ |
|
|
|
00
|
|
|
#12 | |
|
Membre habitué
![]() Sébastien RinguedéInscription : janvier 2011 Messages : 61 ![]() |
Citation:
a+ Sébastien Ringuedé |
|
|
|
00
|
|
|
#13 | ||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour.
Ce que je te propose : récupère d'abord dans 2 variables l'année et le n° de semaine. Ensuite reconstruis des dates SAS classiques (en nb de jours depuis 1960) avec la fonction INTNX qui ajoute des intervalles de temps à une date. Le point de départ est le 1er janvier de l'année, le nombre d'intervalles à ajouter le n° de semaine, l'intervalle de temps est WEEK.2 (les semaines commençant le lundi). En détail ça donne ceci Code :
Bon courage. Olivier PS : une fois le début de semaine créé en tant que date, c'est plus facile de reculer d'une semaine, de 10, etc. avec INTNX ou tout simplement en soustrayant 7 jours ou 70 pour 10 semaines. |
||
|
|
00
|
|
|
#14 | ||
|
Membre habitué
![]() Sébastien RinguedéInscription : janvier 2011 Messages : 61 ![]() |
et bien avant l'apéro, j'étais sur la construction d'un INFORMAT spécifique...
mais y'a un os... début du programme : Code :
et bien là, il y a un os puisque %W (%U et %V sont aussi possibles...) est supposé me donner un numéro de semaine... et il ne s'affiche pas... je regarderai cela demain... (si j'ai le temps..) a+ Sébastien Ringuedé |
||
|
|
00
|
|
|
#15 | ||||
|
Nouveau Membre du Club
![]() Gaëtan Inscription : avril 2011 Messages : 29 ![]() |
en utilisant l'informat weekv qui correspond aux semaines française, on peut faire comme ça :
Pour une année-mois en caractères : Code :
et sinon pour une année-mois en numériques : Code :
|
||||
|
|
00
|
|
|
#16 | ||
|
Membre habitué
![]() Sébastien RinguedéInscription : janvier 2011 Messages : 61 ![]() |
de mon coté, je n'ai pas avancé... parce qu'il y a vraiment un truc étrange...
Code :
on en parle en fait ici : http://communities.sas.com/message/54460#54460 c'est documenté mais ça n'existe pas... maintenant, comme des solutions ont été proposées... a+ Sébastien Ringuedé |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com