|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre actif
![]() Inscription : juillet 2006 Messages : 295 ![]() |
Bonjour,
je travaille en SAS/Base et j'ai un petit problème sur une étape data que je n'arrive pas à optimiser. Cela a pour conséquence soit de créer des tables trop grosses qui peuvent bloquer le serveur (problème de place) soit de faire un programme trop lent à tourner (problème de coupure du serveur dans ce cas). Voici ce que je souhaite faire. Imaginons une table de ce genre : Code :
Je souhaiterais avoir une table avec 2 variables deb et fin et qui, pour chaque individu, compte autant de lignes que de couples début/fin renseignés, soit : Code :
Initialement, je passais par une proc transpose, mais auparavant, je n'avais pas des centaines de variables mais une cinquantaine seulement. Désormais cela démultiplie les lignes et conduit à une table de 1 milliard de lignes... ![]() J'ai essayé également avec une macro qui ferait autant de set que de couples deb/fin, en sélectionnant uniquement les individus qui ont un couple deb/fin rempli, mais même si le nombre d'individus avec des centaines de couples est réduit, le temps nécessaire à la construction de cette table est... gigantesque... Code :
Voilà j'espère avoir été clair, si jamais quelqu'un a une idée, je suis preneur ! Merci et bonne journée |
||||||
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() Rémi Bousquetresponsable adjoint service stat Inscription : mars 2009 Messages : 334 ![]() |
Voilà une piste avec les array, mais je n'ai pas la base permettant de vérifier si les temps de traitement sont réellement optimisés.
Code :
- es tu certain que les length de tes var debi et fini sont optimisées ? - l'option compress te permettrait de réduire la taille de la base sur le serveur (mais à voir si ça accélère ou ralonge les temps de traitement) |
||
|
|
10
|
|
|
#3 | ||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour.
Je +1 par rapport à la solution de Rémi. Je la modifie juste très légèrement (j'intègre le IF à la boucle histoire de profiter de ce que "Si la variable deb_N est vide, les suivantes seront toutes vides.") pour gagner encore un peu de temps. Code :
Bon courage. Olivier |
||
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : juillet 2006 Messages : 295 ![]() |
Bonjour !
Merci beaucoup à vous deux pour ces réponses très précises et ô combien précieuses ! J'avais bien tenté de faire un output en cours d'étape data mais je n'avais pas réussi à formaliser le programme suffisamment pour que ça marche. En testant vos programmes, cela marche non seulement parfaitement, mais en un temps qui dépasse mes espérances (environ 3 minutes !) Bref un grand merci
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com