Return to Snippet

Revision: 34706
at October 27, 2010 09:07 by sandman7OR

Initial Code
***   ORDER MACRO   ***;
    *  This macro creates a format that will order PROC REPORT across columns;
    *  according to the order the values are input, see examples below;
    *    &order is a pipe(|) delimited list of values to be ordered;
    *    &fmtname is the name of the format statement to be output;
    %macro order_fmt(fmtname=,order=);
        %local icol ncol nspace ispace space;

        /* Start defining format */
        proc format;
            value &fmtname

            /* Loop over the columns specified in &order */
            %let ncol = %sysfunc(countw(%bquote(&order),|));
            %do icol = 1 %to &ncol;

                /* Prefix formatted values with spaces to enforce ordering*/
                %let nspace = %eval(&ncol + 1 - &icol);
                %let space = %str();
                %do ispace = 1 %to &nspace;
                    %let space = &space%str( );

                /* Format line - TRIM assumes that input data does not have prefix spaces*/
                "%qleft(%qtrim(%qscan(&order,&icol,|)))" = "&space%qleft(%qtrim(%qscan(&order,&icol,|)))"



    %mend order_fmt;

Initial URL

Initial Description

Initial Title
Macro to create an ordering (for PROC REPORT)

Initial Tags

Initial Language