Bonjour,
j'ai fait le tour de quelques discussions sur l'utilisation des boucles, et j'ai réussi à écrire un bout de programme à l'aide des solutions trouvées.
Le code que j'ai écrit fonctionne dans certains cas et j'essaie de l'automatiser.
Par exemple, ici mon code fonctionne, seulement quand j'ai dans ma base de données les 4 variables p1-p2-p3-p4. Cependant dans mes bases de données je peux avoir une à plusieurs variables dépassant le nombre de 20.
Mes variables initatiales s'appellent used_GSP, used_AGOA, ..., elig_GSP, elig_AGOA,...
J'ai essayé de remplacer le %do i=1 %to 4; par %do i=1 %to dim(i); mais ça ne fonctionne 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 %macro res; %let p1=GSP; %let p2=AGOA; %let p3=LDC; %let p4=AGOAtex; %do i=1 %to 4; PROC SQL; CREATE TABLE TX_Util_cat AS SELECT *,(sum(used_&&p&i.))/(sum(import_value))*100 AS taux_util_&&p&i., (sum(used_&&p1.-used_&&p4.))/(sum(import_value))*100 AS taux_util_pref FROM pref_utilization3 WHERE elig_&&p&i.=1 GROUP BY cat; QUIT; PROC SQL; CREATE TABLE TX_Util_all AS SELECT * , (sum(used_&&p&i.))/(sum(import_value))*100 AS taux_util_&&p&i. FROM pref_utilization3 WHERE elig_&&p&i.=1; QUIT; %end; %mend; Option mprint; %res;
Mon deuxième problème est au niveau de la somme suivante puisque si la variable du début ne bouge pas, la variable finale, elle, n'est pas toujours la même.
Par exemple sur une base de données où je n'ai qu'une variable (used_GSP), il me crée forcement une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part (sum(used_&&p1.-used_&&p4.))
ps : le code est un peu long car je répète deux opérations : une qui distingue les catégories, une autre sans distinction de catégorie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ERROR: The following columns were not found in the contributing tables: elig_AGOA, used_AGOA, used_LDC.
Quelqu'un aurait une idée? suis-je dans la bonne direction, ou faut-il utiliser un array plutôt?
Merci d'avance pour vos solutions!
Partager