用SAS读入原始数据(1):文本文件 的四种格式

文本文件多以.txt、.dat以及.csv为后缀(在Unix/Linux世界,还可能出现.data数据甚至没有后缀的情况)。一般分两种,其一看起来跟下面一样——如果用UltraEdit等编辑器打开,你能看到指示列数的标尺,而且每个字段的列数是固定的,称为字段固定(Fixed Fields)的文本文件:

2810 61 MOD  F
2804 38 HIGH F

下面的数据中,每个字段的列数不必相同,但都由同一样个的分隔符(这里是逗号)分开,所以称为分隔符固定(Delimited Data)或者自由格式(Free-format)的文件文件。如果分隔符为逗号(通常以.csv为后缀),干脆就叫做“用逗号分隔的文本文件”:

1-Mar-90,LON,198
13-Mar-90,FRA,2073

对以上两种文本格式的数据,SAS提供了以下四种基本的输入模式:

  1. 列输入模式(Column) ——应用于字段固定的文本文件
  2. 格式化输入模式(Formatted) ——应用于字段固定的文本文件
  3. 列举输入模式(List) ——应用于分隔符固定的文本文件
  4. 命名输入模式(Named)

对以上几种输入模式,基本的语句如下,区别就在于input语句的具体设定:

data 你对导入数据的命名;
    infile  源文件名,加上具体的盘符位置;
    input 变量输入设定;
run;

1.列输入模式(Column)--应用于字段固定的文本文件

对字段固定的源文件,input语句的形式是

input 变量名1<s>开始列数-结束列数 变量名2<s>开始列数-结束列数 …;

一个能工作的列输入模式语句看起来就像下面展示的:

data work.example1;
    infile 'C:/data/example1.dat'  firstobs=2 obs=100;
    input ID 1-3 Name $ 5-10;
run;

优点:

  1. 对字段的选择非常灵活,可以任意选择字段,以及安排读入的次序;
  2. 整个字段或其部分可以重复读入;
  3. 字段间不一定要有空格或者其他分隔符来分隔;
  4. 字符变量最多可含32K个字符,并可以包含空格符;
  5. 对缺失数据没有特殊占位符的要求。一个空格字段就读为一个缺失值,也不会引起其他字段读入的错误。

局限:

  1. 可以设定输入长度,但不可以设定输入格式。对数值型变量,只能读入标准数据值(Standard Numeric Data Value),即只包括数字、正负号、小数点和科学计数符号E构成的数,对日期型数据,以及包含美元符号、逗号等其他符号的数值,因为需要设定输入格式并 按格式读入,列输入模式就无法正确读取。

2.格式化输入模式(Formatted)--应用于字段固定的文本文件

格式化输入模式类似于列模式:

  1. 它适用于字段固定格式的数据文件;
  2. 它也给出字段开始的列数,但不直接给出结束列数,而是通过输入格式给出读入长度;
  3. 它可以设定输入格式。

它的input语句的格式为:

input <指针控制> 变量名 输入格式 …;

注1:指针控制,就是将输入列指针控制在某个位置,作为读入字段的开始列号,它有 @n 或者 +n 的形式:

  • @n表示从第n列开始读入(指示开始列数的绝对位置);
  • +n表示将列控制指针增加n列侯读入(指示相对位置)。

一个能工作的格式化输入模式语句看起来就像下面展示的:

data work.example2;
    infile 'C:/data/example2.dat';
    input Name $ 2. @3 Job $5. +7 Place $8.;
run;

3.列举输入模式(List)--应用于分隔符固定的文本文件

因为分隔符固定的数据可以用分隔符来确定字段,input语句特别简单:

input 变量名<s>…;

如果要读入非空格分隔符的数据,就需要在infile语句中指明(默认为空格):

infile 文件盘符 <dlm="分隔符">;

在列举模式下,变量长度的缺省值为8,长度超过8的字符变量在读入时会被截断,这时可以用lenght语句来设定长度:

length 变量名<s> 长度;

列举模式也可以设定输入格式,这只需要在输入变量设定时附加上相关修饰:

input 变量名<s>: 输入格式 …;

一个能工作的列举输入模式语句看起来就像下面展示的:

data work.example3;
    infile 'C:/data/example3.dat' dlm=',';
    length item $ 10.;
    input ID Name $ item $   income:comma9.;
run;

4.命名输入模式(Named)

命名输入模式很少见到,因为很难得见到这种格式的原数据,其中三个变量是ID、Name和Score:

1 Name=Tom Score=A
2 Name=Jim  Score=C

相应的input语句为:

input  ID Name=$3. Score=$1.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值