SAS FORMATS基础和概述



1、  什么是SAS FORMATS?

SAS 的数据类型虽然只有数字( numeric )和字符( character )两种,但是这并不妨碍 SAS 展示其 在数据的读取、转换和展示上的高效、强大和灵活。我想原因之一,就是因为有了 SAS FORMATS 。什么是 SAS FORMATS ?简言而之,就是 SAS 在读取或展示数据时的一些指令。更直白的说,就是 SAS 用来读取和展示数据的一些规则。

话说到此,我们也许会有疑问,平时读取和展示数据时,好像也没用到
SAS FORMATS?

例如数据集test1,在读取时并没有指定什么格式,也没碰到什么麻烦,但How about数据集test2呢?


data  test1;

  input pid $  price;

datalines;

p001 2239.5

p002 456

p003 231.4567

;

run;

 

data test2;

  input pid $ price;

datalines;

 

d1 p001  $2,239.5

d1 p002  $456

d1 p003  $231.4567 

;

run;


其实SAS 在读取或展示数据时,都要按照一定的FORMATS来进行。只是不过如果是标准的数字型(如不带货币符号,千分位号等)和标准的字符型(如字符中间不嵌空格等),SAS 可以按默认的FORMATS来读取,而不必具体指定。如若不是,则需具体指定。如数据集test2,数字、字符均非“标准”的,故需另外指定读入格式。

data test2;

  input pid $ & price dollar9.2;

datalines;

d1 p001  $2,239.5

d1 p002  $456

d1 p003  $231.4567 

;

run;

proc print;

run;

 

2、  SAS FORMATS的分类

SAS FORMATS 最常见的有两类:输入格式( informat )和输出格式( format )。顾名思义,输入格式即 SAS 读入数据的时的规则,输出格式即 SAS 输出数据时的规则。

以上面的
test2 为例,在读入数据集时,由于 pid 变量中间有空格,所以要加“ & ”格式修饰符; price 有货币符号和千分位符号,所以用 dollar 格式读入,在读取时以移除他们。不过 print 的结果并没有显示货币符号和千分位符号,在 explorer 窗口打开数据集,也不见货币符号和千分位符号的踪影。怎么回事?如何才能在结果中看到他们?这就需用到输出格式。

SAS FORMATS基础和概述_第1张图片SAS FORMATS基础和概述_第2张图片
data test2;

  input pid $ & price dollar9.2;

datalines;

d1 p001  $2,239.5

d1 p002  $456

d1 p003  $231.4567 

;

run;

proc print;

  format price dollar9.2;

run;

 

行文至此,我们或许会问?有必要这样折腾吗?读入的时候去掉货币符号和千分位符号,展示的时候又再加上?直接将 price 变量原样存入不就行了?

硬要说,是可以的,只是要原样存入的话,就只能存入字符型数据,这样做至少有两个缺限:
一是数字变成字符型,再进行相关的加减乘除运算和后继统计分析都会很不方便。
二是增加了存储数据的空间。


其实,个人理解,简单地说,SAS 输入输出格式的作用有点像“脱外套”和“加外套”的关系。读入数据时存储时,要直击其本质,去掉花哨复杂的“外衣”,剥洋葱似的直取其“精华”部分;展示数据时,就像女孩要出门了,得打扮一番,加些漂亮的装饰,变得“好看”了再展现在世人面前。

 

当然 SAS FORMATS 从另一个角度上来说,又分字符型格式和数字型格式,这与 SAS 的数据类型相关。一般来说,字符型格式用于字符型数据,数字型格式用于数据型数据,格式和数据类型应该匹配,否则会出错。

SAS FORMATS基础和概述_第3张图片

 

此外, SAS FORMATS 也可以分为 SAS 系统自带的格式和用户自定义格式。上面提到和用的都是 SAS 系统自带的格式 。而用户自定义的格式是指用户用 proc format 定义的格式。例:

proc format;

  value genderfmt 1=''

                  2='';

run;

 

data test3;

  input sid $ gender;

datalines;

s001 1

s002 2

s003 1

s004 2

;

run;

proc print;

 format gender genderfmt.;

run;

结果如下图:

 


 SAS FORMATS基础和概述_第4张图片 

 

3、  SAS FORMATS的样貌

SAS 输入输出格式,有着统一的样貌。

<$> name .

 简要说明:

$ :字符型格式必需用的前缀

Name:格式的名称,必需符合SAS 命名规则

W :指定读入或输出的宽度,注意,包括小数点,货币符号、千分位号、负号等

. :无论哪种格式都必需的,不能省略,因为靠他区别格式名和变量名

D :小数位数,只用于数字型格式。

 

偷个懒,截张图,可以看看以下例子。 

 SAS FORMATS基础和概述_第5张图片

4、  SAS FORMAST的使用

总结起来,使用的 SAS FORMATS 的方法有以下几种:

²        Iput/put 语句

²        Format 语句

²        Atrrib 语句

²        Iput /put 函数


Input
语句 用于读入数据时指定输入格式, put 语句用于(在 LOG 里)输出时指定格式; format ,attrib 语句可以在 DATA 步或 PROC 步中指定格式。不同的是在 DATA 步中变量和格式是永久关联的,在 PROC 步是暂时关联的。当然在 PUT 语句里也是暂时关联的。

举例说明:

data test4;

  input x dollar 6.2 f1 mmddyy7. f2 date7. t1 mmddyy9. t2 date10.;

  put x=

      /x=dollar8.2

        /f1= f2=

        /t1= t2=; 

  format  f1 date9.;

  attrib  f2 format=mmddyy10.;

 

datalines;

$23.32 110611 06nov11 11/06/11 06nov2011

;

run;

 

proc print;

  format  t1 mmddyy10.;

  attrib  t2 format=mmddyy10.;

run;  

output 结果: 

o

 SAS FORMATS基础和概述_第6张图片

log结果:

 
SAS FORMATS基础和概述_第7张图片

 

 

简单解释:x dollar格式是暂时关联的,所以在output仍然显示数字格式。

f1,f2 的格式是永久联系的,所以在logoutput f1都是按date9.格式显示,f2 都是按mmddyy10.格式显示。t1,t2 的格式暂时联系的,所以在LOG里还是显示的数字格式,而非mmddyy10.格式。

 

Input put 函数常用于数据类型的转换。如

 

data test5;

 a="21121.67";

 b=21121.67;

 a_n=input(a,dollar9.2);

 b_c=put(a,$8.);

run;

 

SAS FORMATS基础和概述_第8张图片



来源:

http://blog.sina.com.cn/s/blog_41889b900100wjz5.html

你可能感兴趣的:(SAS)