本章主要详细总结一下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,并根据我们定义的顺序排列,得到分类完整且正确排序的表。