La variable macro & sysmaxlong permet de créer l'élément supérieure de la macro, c'est à dire que l'élément n-ième est créé, correspondant au nombre maximum de lignes dans la table.
proc sql noprint;
select distinct ville
into :ville-ville&sysmaxlong.
from monfichier;
%let n_ville = &sqlobs;
quit;
%do i = 1 %to &n_ville;
&&&ville&i;
%end;