Bonsoir,
Je suis à la recherche d'une façon d'améliorer le temps de run d'un macro - programme existant (extraction de données sur un serveur).
Un exemple, si je souhaite extraire 3 mois de données, j'aurais :
Ce bout de code, selon les périodes, procède mois par mois. Il extrait les données d'août puis celle de septembre et enfin celle d'octobre tout en utilisant la proc append à chaque étape pour les regrouper dans ma_table. Le point noir de ce mode de fonctionnement, c'est qu'il fait exactement la même chose mois par mois et que le temps de run peut être de plusieurs heures selon le nombre de période que je veux extraire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 %extract_macro ( tab_in = data tab_out = ma_table debut = 01/08/2016 fin = 31/10/2016 );
Je me demandais s'il était possible de plutôt procéder via un traitement parallèle.
Au lieu d'une macro qui procède comme indiqué ci dessus, j'aimerais que le lancement de cette macro génère 3 sous - macros identiques où seuls les paramètres de debut et fin changeront pour chacune :
Bref, un moyen de réduire le temps de run à un mois d'extraction seulement. Mais qui je m'en doute sera plus gourmand en mémoire. Si trop gourmand, ce sera ensuite à moi d'aviser de mon côté pour voir si l'on ne pourrait pas élargir à 3 mois au lieu d'un. Aussi, ce n'est qu'un exemple fictif et dont certaines choses seront à déclarer en amont (les dates par exemple selon celles de la macro initiale). L'automatisation ne me pose pas de soucis, c'est la parallélisation des tâches que je ne maîtrise absolument pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 MACRO INITIALE : %extract_macro ( tab_in = data tab_out = ma_table debut = 01/08/2016 fin = 31/10/2016 ); Cette macro génère les 3 macros suivantes, non pas à la suite mais parallèlement. %extract_macro ( tab_in = data tab_out = ma_table_1 debut = 01/08/2016 fin = 31/08/2016 ); %extract_macro ( tab_in = data tab_out = ma_table_2 debut = 01/09/2016 fin = 30/09/2016 ); %extract_macro ( tab_in = data tab_out = ma_table_3 debut = 01/10/2016 fin = 31/10/2016 ); Une fois que et seulement une fois que tout a tourné, est lancé le code suivant : data ma_table set ma_table_1 ma_table_2 ma_table_3; run;
Est - ce possible ? Si oui, de quelle façon et quelles sont les notions importantes à retenir pour une bonne parallélisation ?
Merci,
Mac_Leod.
Partager