Code en vrac

Dépouillement automatique des données sous SAS

Un petit algorithme (macro) sous SAS qui génère automatiquement le dictionnaire des variables et les tris à plat de celles-ci.

Evidemment, les variables de type "libre réponse" sont à exclure dans la macro sinon les tris à plat risquent de générer autant d'occurences que de réponses...

lib = \"chemin/vers/libname\";

* PREPARATION DE LA TABLE:

* DROP SUR VARIABLES INUTILES ET LIBRE-PROPOS

 

data lib.table(drop=toutes les variables qui n'ont pas un format prédéfini);

set lib.table_new;

run; * CREATION DE LA TABLE CONTENTS PUIS TABLE DICO CONTENANT LE NOM DES VARIABLES;

proc contents data=lib.tab out=lib.contents;

run;

proc sql;

create table dico as

select name 'Nom de la variable', label 'Libellé de la variable' from lib.contents;

quit; * ON AJOUTE A LA TABLE DICO UNE VARIABLE \"PAGE\" QUI RENVOIE AU NUMERO DE PAGE DU PDF OU LE TRI A PLAT EST PRESENTE;

data dico;

set dico;

retain page 1+N; /* ici, il s'agit d'indiquer le numéro de page (N + 1 page de présentation faite plus bas) o\u00f9 démarrent les tris à plat => IL FAUT RENSEIGNER N. Il vous faudra donc faire tourner la programme une première fois - pensez à retirer N - voir sur le pdf à quelle page démarrent les tris, faire la modification et relancer le prog (pensez à fermer le pdf...)*/

page = page +1;

run; * MACRO DE CREATION DU DICTIONNAIRE DES VARIABLES + TRIS A PLAT;

dm 'clear log';

%macro tris;

proc sql;

select count(name) into:nb from lib.contents;

quit;

%let n = &nb.;

proc sql;

select name into:vars1-:vars&n. from lib.contents;

quit; ods pdf file='chemin vers le fichier pdf'

startpage=never

style=statdoc

author=''

title='Dépouillement automatique enqu\u00eate XXXX' notoc;

        /* PAGE DE PRESENTATION ------ RENSEIGNEZ LES CHAMPS ! - je \"pompe\" ici un exemple donné en cours par un enseignant, S. Delarre - je précise pour le copyright! */

options nodate nonumber; * ne pas écrire la date en anglais;

ods escapechar '^';

ods noproctitle; *ne pas afficher nom procédure;

title; * ne pas afficher titre;

%let date=%sysfunc(today(), fradfwdx.); ods pdf text='^S={font_size=68pt}';

ods pdf text='^S={just=center font=(\"Times Roman\", 26pt, bold)}ETABLISSEMENT';

ods pdf text='^S={font_size=68pt}';

ods pdf text='^S={font_size=68pt}';

ods pdf text='^S={just=center font=(\"Times Roman\", 26pt, bold)}ETUDE CONCERNEE';

ods pdf text='^S={font_size=68pt}';

ods pdf text=\"^S={just=center font=('Times Roman', 14pt, bold) foreground=red}Résultats bruts au &date.\";

ods pdf text=\"^S={just=center font=('Times Roman', 14pt, bold) foreground=red}Dictionnaire des variables\";

ods pdf text=\"^S={just=center font=('Times Roman', 14pt, bold) foreground=red}Tableaux de répartition des modalités\"; ods pdf text='^S={font_size=68pt}';

ods pdf text='^S={font_size=68pt}';

footnote1 'Etude XXX -- Etablissement XXX';

footnote2 \"^S={just=center font=('Times Roman', 8pt)}Page ^{thispage}\"; * note en bas de page remise à zéro;

ods pdf startpage = now;

ods pdf text=\"^S={just=center font=('Times Roman', 22pt, bold)}Dictionnaire des variables\";

ods pdf text=\"^S={just=center font=('Times Roman', 16pt)}\";

/* GENERATION DES PAGES DU DICTIONNAIRE */

        proc sql;

select name 'Nom de la variable', label 'Libellé de la variable', page from dico;

quit;

        /* ON GENERE LES TRIS A PLAT */

%do i=1 %to &n.;

ods pdf startpage = now;

ods pdf text=\"^S={just=center font=('Times Roman', 16pt)}Variable &i. : &&vars&i.\";

ods pdf text=\"^S={just=center font=('Times Roman', 16pt)}\";

proc freq data=lib.table;

tables &&vars&i.;

run;

%end;

ods pdf close;

%mend;
%tris;