天天看点

SAS中的format

 本章主要详细总结一下SAS软件编程过程中的各种format。其中包括自定义format与系统自带的各种数字格式,时间格式等等,以及与format相关的过程与函数用法。系统自带format将在后续慢慢整理。
  • 自定义format,proc format过程用法及其与之相关的put/input,putc/inputc,putn/inputn用法。
/*  自定义format  */
proc format;
    invalue visitn  'Day1'=1
                    'Day2'=2
                    'Day3'=3
                    'Day4'=4; 
    value  visit  1='Day1'
                  2='Day2'
                  3='Day3'
                  4='Day4';

    value   sex 1='男'
                2='女'
            country 3='中国'
                    4='美国';

    invalue sexn '男'=1
                 '女'=2
            conutryn  '中国'=3
                      '美国'=4;
run;
/*  测试数据集  */
data test;
    visitn=1;visitc='1';formatc='$sex.';formatn='sexn.';format='8.1';output;
    visitn=2;visitc='2';formatc='$sex.';formatn='sexn.';format='8.2';output;
    visitn=3;visitc='3';formatc='$country.';formatn='countryn.';format='8.3';output;
    visitn=4;visitc='4';formatc='$country.';formatn='countryn.';format='8.4';output;
run;
/*  对数据集中的变量使用自定义format  */
data start;
    set test;
    visit=put(visitn,$visit.);

    mixc=putc(visitn,formatc);

    mix=inputc(visit,formatn);

    numc=putn(visitn,format);

    num=inputn(visitc,format);
run;
    
           

上面这段程序可以很直观全面的体现了proc format过程的用法,以及相关对应的put/input用法。

首先 ,value/invalue 语句分别和put/input匹配使用,value/invalue语句用法为 value/invalue ($) foramt xx=yy;

其中value语句用于将变量值转化为字符型,即等式右端的yy为字符型,与put函数搭配使用转字符;

invalue语句用于将变量值转化为数值型,即等式右端的yy为数值型,与input函数搭配使用转数值。

value后的format为自命名的format名称,用于后续引用,引用时变量名后必须加'.'结尾。

在此需注意的是,value后的format名前是否要加$符号取决于等式左边的xx是否为字符型,若xx为字符型,则必须加$,否则不加。invalue后的format名前一般不加$。总结来说,即value定义的format名前是否加$取决于使用该format的原变量是否为字符型。
  • 这里顺便介绍下putc/inputc与putn/inputn的用法。

与put/input相同putc与putn是用于转化为字符型,inputc与inputn用于转化为数值型。

不同点在于put/input对一个变量所使用的format必须是一致的,format必须是常值,不能为变量。

而putc/putn/inputc/inputn作用于一个变量的format可以是个变量,即相当于一个变量的不同观测可以有不同的format。

最后putc与putn的区别在于putc作用于一个变量的format对应的变量所含的格式必须是自定义格式名,

而putn作用于一个变量的format对应的变量所含的格式必须是系统自带的数值型格式名,例如8.3,如w.d这个形式以及best.等形式。

总之,putn一般用于将数值型变量,转化为该数值变量对应的字符形式。

inputc/inputn原理与上述一致。

format语句:format var format.,对变量var施加一个format,但是此时,变量var的值并不会改变,类型也不会变,而仅仅是显示成了format定义的样子。

format _all_;informat _all_;去除数据集中所有变量显示的输入输出格式。

将format导出至数据集:使用proc format的cntlout=选项。

从符合标准的sas数据集导入format:使用cntlin=选项。符合标准即,包含固定字段的数据集,所必须的字段名为fmtname,start,end,label。

我们经常在根据分类变量做统计过程出表的时候,需要将全部的分类列出,且按照规定的顺序排序。但是由于分类变量中出现的值并不够全面和完整,此时,我们可以通过proc format过程定义format,然后导出至数据集,只keep我们所需要的列,然后和分类不够全的数据集merge,并根据我们定义的顺序排列,得到分类完整且正确排序的表。

SAS