Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macro Discussion :

Analyse univariée avec PROC FREQ


Sujet :

Macro

  1. #1
    Nouveau Candidat au Club
    Analyse univariée avec PROC FREQ
    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;

  2. #2
    Nouveau Candidat au Club
    personne?

###raw>template_hook.ano_emploi###