Bonjour,
Actuellement je cherche à modifier une macro devant afficher l’effectif total et son % pour chaque modalité d’une variable catégorielle.
Cette macro sera ensuite intégrée dans un programme et sa sortie sera sous la forme d’une colonne "TOTAL"* adjointe à d'autres sorties.
Jusqu’à présent je n’arrive pas à corriger les éléments empêchant la macro de fonctionner.
Est-ce que quelqu’un peut relire le code et me dire ce qui cloche svp ?
merci par avance
%MACRO analyseuni(in=_last_,dep=, vars=, out=_out);
PROC FREQ DATA=&in.;
TABLES &vars.;
ods output OneWayFreqs=_owf;
RUN;
PROC SQL;
SELECT COUNT(*) INTO :_cptModalites FROM _owf;
PROC FREQ DATA=&in.;
TABLES &vars.;
ods output CrossTabFreqs=_ctf;
RUN;
PROC SORT DATA=_ctf;
BY table &vars. ;
RUN;
DATA _tmp(keep=&vars. variable modalite type value1);
MERGE _ctf;
BY table;
ATTRIB variable length = $32;
ATTRIB modalite length = $255;
ATTRIB type length = $32;
ATTRIB value1 length = 8;
variable = SUBSTR(Table, INDEX(Table, "*") + 2);
modalite = COMPRESS(vvaluex(variable));
type = 'Frequency'; value1 = Frequency;
output;
type = 'RowPercent'; value1 = RowPercent;
output;
RUN;
proc sort data=_tmp out=_tmp;
by variable modalite ;
run;
proc transpose data=_tmp out=_tmp(drop=_name_);
id type;
by variable modalite ;
var value1;
run;
DATA _tmp(KEEP=variable modalite value);
set _tmp;
by variable modalite;
OUTPUT;
attrib value length = $32;
OUTPUT;
PROC TRANSPOSE DATa=_tmp OUT=&out.(DROP=_NAME_);
BY variable modalite;
ID type;
VAR value;
RUN;
PROC DATASETS LIB=work NOLIST;
DELETE _ctf _tmp;
RUN;
%MEND analyseuni;
Partager