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;