Macro-programmes: exemple introductif

Je suppose que je dispose d'une table par département, chaque table contenant, pour chacune des communes du département : le code commune, le nombre d'habitants et le nombre d'emplois offerts. Je souhaite sur chacune de ces tables 1) ajouter une colonne txemploi égale au ratio du nombre d'emplois sur le nombre d'habitants 2) connaître la moyenne et l'écart-type de txemploi 3) tracer une boxplot de txemploi, en distinguant deux sous-populations : communes de plus/moins de 10000 habitants.
Pour répondre à ce besoin, je vais écrire une étape data, une proc means, une proc format et une proc boxplot :

data dep01 ;
  set dep01 ;
  txemploi = nbemplois / nbhabitants ;
run ;
proc means data=dep01 mean std ;
  var txemploi ;
proc format ;
  value taille low-<10000= "moins de 10000 hab" 10000-high = "plus de 10000 hab" ;
proc boxplot data=dep01 ;
  format nbhabitants taille. ;
  plot txemploi*nbhabitants ;
run ;

Ce programme simple contient 4 occurences du nom de la table. La méthode "à la main" risque d'être puissamment fastidieuse... Voyons comment je peux transformer mon programme en un macro-programme :

%macro mapremieremacro (table) ;
  data &table. ;
    set &table. ;
    txemploi = nbemplois / nbhabitants ;
  run ;
  proc means data=&table. mean std ;
    var txemploi ;
  proc format ;
    value taille low-<10000= "moins de 10000 hab" 10000-high = "plus de 10000 hab" ;
  proc boxplot data=&table. ;
    format nbhabitants taille. ;
    plot txemploi*nbhabitants ;
  run ;
%mend ;

Les changements intervenus sont minimes :

Remarque : Le format étant créé une fois pour toute la session, et ne dépendant pas de la table, on peut (doit) le sortir du macro-programme.