您的位置:首页 > 其它

用SAS读入原始数据

2009-03-14 21:28 211 查看
[align=left]转自:用SAS读入原始数据(1):文本文件[/align]
[align=left]文本文件多以.txt、.dat以及.csv为后缀(在Unix/Linux世界,还可能出现.data数据甚至没有后缀的情况)。一般分两种,其一看起来跟下面一样――如果用UltraEdit等编辑器打开,你能看到指示列数的标尺,而且每个字段的列数是固定的,称为字段固定(Fixed Fields)的文本文件: [/align]

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

[align=left]1-Mar-90,LON,198
13-Mar-90,FRA,2073[/align]
[align=left]对以上两种文本格式的数据,SAS提供了以下四种基本的输入模式: [/align]

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

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

[align=left]data 你对导入数据的命名;
infile 源文件名,加上具体的盘符位置;
input 变量输入设定;
run;[/align]
[align=left]1.列输入模式(Column)--应用于字段固定的文本文件 [/align]
[align=left]对字段固定的源文件,input语句的形式是 [/align]

[align=left]input 变量名1<s>开始列数-结束列数 变量名2<s>开始列数-结束列数 …;[/align]
[align=left]一个能工作的列输入模式语句看起来就像下面展示的: [/align]

[align=left]data work.example1;
infile 'C:\data\example1.dat' firstobs=2 obs=100;
input ID 1-3 Name $ 5-10;
run;[/align]
[align=left]优点: [/align]

[align=left]对字段的选择非常灵活,可以任意选择字段,以及安排读入的次序; [/align]

[align=left]整个字段或其部分可以重复读入; [/align]

[align=left]字段间不一定要有空格或者其他分隔符来分隔; [/align]

[align=left]字符变量最多可含32K个字符,并可以包含空格符; [/align]

[align=left]对缺失数据没有特殊占位符的要求。一个空格字段就读为一个缺失值,也不会引起其他字段读入的错误。[/align]

[align=left]局限: [/align]

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

[align=left]2.格式化输入模式(Formatted)--应用于字段固定的文本文件 [/align]
[align=left]格式化输入模式类似于列模式: [/align]

[align=left]它适用于字段固定格式的数据文件; [/align]

[align=left]它也给出字段开始的列数,但不直接给出结束列数,而是通过输入格式给出读入长度; [/align]

[align=left]它可以设定输入格式。[/align]

[align=left]它的input语句的格式为: [/align]

[align=left]input <指针控制> 变量名 输入格式 …;[/align]
[align=left]注1:指针控制,就是将输入列指针控制在某个位置,作为读入字段的开始列号,它有 @n 或者 +n 的形式: [/align]

[align=left]@n表示从第n列开始读入(指示开始列数的绝对位置); [/align]

[align=left]+n表示将列控制指针增加n列侯读入(指示相对位置)。[/align]

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

[align=left]data work.example2;
infile 'C:\data\example2.dat';
input Name $ 2. @3 Job $5. +7 Place $8.;
run;[/align]
[align=left]3.列举输入模式(List)--应用于分隔符固定的文本文件 [/align]
[align=left]因为分隔符固定的数据可以用分隔符来确定字段,input语句特别简单: [/align]

[align=left]input 变量名<s>…;[/align]
[align=left]如果要读入非空格分隔符的数据,就需要在infile语句中指明(默认为空格): [/align]

[align=left]infile 文件盘符 <dlm="分隔符">;[/align]
[align=left]在列举模式下,变量长度的缺省值为8,长度超过8的字符变量在读入时会被截断,这时可以用lenght语句来设定长度: [/align]

[align=left]length 变量名<s> 长度;[/align]
[align=left]列举模式也可以设定输入格式,这只需要在输入变量设定时附加上相关修饰: [/align]

[align=left]input 变量名<s>: 输入格式 …;[/align]
[align=left]一个能工作的列举输入模式语句看起来就像下面展示的: [/align]

[align=left]data work.example3;
infile 'C:\data\example3.dat' dlm=',';
length item $ 10.;
input ID Name $ item $ income:comma9.;
run;[/align]
[align=left]4.命名输入模式(Named) [/align]
[align=left]命名输入模式很少见到,因为很难得见到这种格式的原数据,其中三个变量是ID、Name和Score: [/align]

[align=left]1 Name=Tom Score=A
2 Name=Jim Score=C[/align]
[align=left]相应的input语句为: [/align]

[align=left]input ID Name=$3. Score=$1.[/align]
[align=left]参考资料: [/align]

[align=left]汪嘉冈《SAS V8基础教程》,北京:中国统计出版社,2001 [/align]

[align=left]SAS .lineTutor: Basic and Intermediate SAS[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: