创建SAS Format的几种方法

不管是做AD还是TFL,我们经常会碰到要创建Format。当Format中条目不多时我们可以直接用PROC FORMAT来创建,但是当条目很多时,这种方法就不方便了。下面详细介绍其他几种方法:

设有数据集如下,假设要创建START为AVISITN,LABEL为AVISIT的Format:

Format

  1. 通过CALL EXECUTE创建。
    /*方法1: CALL EXECUTE*/
    data _null_;
        set demo end=eof;
        if _n_=1 then call execute('proc format; value vs1t');
        call execute(cats(AVISITN)||' = '||quote(cats(AVISIT)));
        if eof then call execute('; run;');
    run;
    
  2. 通过宏变量创建。
    /*方法2: macro variable*/
    proc sql noprint;
        select catx(' = ', cats(AVISITN), quote(cats(AVISIT))) into :fmtlst separated by ' '
            from demo
            order by AVISITN;
    quit;
    
    proc format;
        value vs2t
        &fmtlst;
    run;
    
  3. 通过CNTLIN=选项创建。
    /*方法3: CNTLIN= option*/
    proc sql;
        create table fmt as
            select distinct 'vs3t' as FMTNAME
                 , AVISITN as START
                 , cats(AVISIT) as label
            from demo
            order by AVISITN
            ;
    quit;
    
    proc format library=work cntlin=fmt;
    run;
    
  4. 通过FILENAME创建。
    /*方法4: FILENAME*/
    proc sql;
        create table fmt as
            select distinct AVISITN
                 , quote(cats(AVISIT)) as AVISIT
            from demo
            order by AVISITN
            ;
    quit;
    
    /*将CODE输出到一个临时文件*/
    filename code temp;
    data _null_;
        file code;
        set fmt;
        if _n_=1 then put +4 'value vs4t';
        put +14 AVISITN ' = ' AVISIT;
    run;
    
    proc format;
        %inc code / source2;
        ;
    run;
    
曾宪华 /
本文采用 署名-非商业性使用-相同方式共享 3.0许可协议 属于 程序人生 分类, 被贴了 CALL EXECUTE FILENAME PROC FORMAT 书签

上一篇 正则表达式之非捕获匹配(?:...)
下一篇 一个关于Define.xml的奇怪问题