《The Little SAS Book》学习笔记—Chapter2(2) DATA步中常见的读取数据方式

内容参考书籍:《The Little SAS Book》中文版


在SAS程序中,使用DATA步进行数据的读取和创建SAS数据集是一种常见的方式,接下来,将根据原数据的内容的格式不同,介绍SAS程序DATA步常见的几种数据读取形式。

读取空格分割的原始数据(列表输入)
空格分割数据示意图(来源:《The Little SAS Book》中文版)
  • 适用情形:原始文件中数据与数据之间至少存在一个空格分割符,合适的方式是使用列表输入读取该数据。
  • 局限性:
  1. 读取全部数据,无法跳过部分数据;
  2. 原始数据缺失值需要使用.进行标识;
  3. 字符型数据内部不能内嵌空格,长度小于8字符;
  4. 日期等特殊类型数据不适用。
  • 使用:
    在DATA步中,只需在INPUT关键字后面按照原数据中出现的顺序罗列出变量名称。
  • 示例
    原数据存储位置d:/mydata/test.dat, 文件内容如下:
Jack 16 . 57
Tom 17 . .
Lily 18 165 50
David 18 178 67

在DATA步中使用INPUT关键字读取:

*创建一个名为test的数据集;
*使用列表读入,读取test.dat数据文件;
DATA test;
  INFILE 'd:/mydata/test.dat';
  INPUT name $ age height weight;
RUN;
*打印数据以确保被正确读取;
PROC PRINT data = test;
  TITLE "SAS test data set";
RUN;
  • 打印结果
    打印输出的结果如下表所示:
Obs name age height weight
1 Jack 16 . 57
2 Tom 17 . .
3 Lily 18 165 50
4 David 18 178 67
  • 说明
    在原数据中空格分割的缺失值,在打印结果的表中以.显示。

读取按列排列的原始数据(按列输入)
按列排列数据示意图(来源:《The Little SAS Book》中文版)
  • 适用情形:
  1. 每个变量值能在数据行的相同位置找到,值之间可以无需空格
  2. 变量值之间或者缺失值没有分隔符或者点标识,缺失值可以留空
  3. 字符数据可以内嵌空格
  4. 可以跳过不需要的变量
  • 局限性:
  1. 所有值必须是字符型或者标准数值型,即:数字,小数点,正负号和E
  2. 带有内嵌逗号日期格式数据不适用。
  • 使用:
    在DATA步中,只需在INPUT关键字列出变量名,留出空格后,标明变量对应的列范围;如果是字符型,则在变量名后留出空格标注$符号,再标明变量对应的列范围。
  • 示例
    示例数据是书中的数据,最顶部的标尺是为了方便确定列数,原数据内容如截图所示:

    按列排列数据示例(来源:《The Little SAS Book》中文版)

在DATA步中使用INPUT关键字读取:

DATA test;
  INFILE 'd:/mydata/test.dat';
  INPUT VisitingTeam $ 1-20 ConcessionSales 21-24 BleacherSales 25-28 OurHits 29-31 TheirHits 32-34 OurRuns 35-37 TheirRuns 38-40;
RUN;
PROC PRINT data = test; /*打印数据以确保被正确读取*/
  TITLE "SAS test data set";
RUN;
  • 打印结果

    示例数据打印结果

读取非标准格式的原始数据(格式化输入)

SAS中的标准格式只有两种类型,字符型数值型。但是日常使用过程中还需遇到像日期内嵌逗号的数值等数据。这个时候简单的列表读取会导致数据格式有误。在SAS中通过使用输入格式告知计算机如何解读这些数据。

读取非标准格式数据示意图(来源:《The Little SAS Book》中文版)
  • 适用情形:
  1. 非标准格式数据,如内嵌逗号和美元符号的数值,十六进制或者压缩十进制数据;
  2. 日期数据的读取,SAS实际是把日期数据转换成了和1960年1月1日的天数差作为数值进行存储。
  • 使用:
    SAS中输入格式的三个基本类型是:字符型、数值和日期。一般形式是:
字符                                           
$INFORMATw.          
数值
INFORMATw.d
日期
INFORMATw.
  1. $符号标识字符型,INFORMAT是格式,w.指明长度;
  2. 在数值型输入格式中,w指明长度,d指明小数点后的位数;
  3. 句点对于格式中长度的规定很重要,没有句点,w会被解释为格式名;
    4.$w.用来读取标准的字符型数据,w.d用来读取标准的数值型数据
  • 示例
    原数据存储位置d:/mydata/test.dat, 文件内容如下:
Wang Xiaoming 14 10-10-2016 4.45 4.35 4.75 4.32 4.36
Li Lei        17 15-10-2016 4.17 4.75 4.32 4.75 4.75
Zhao Xiaoli   15 16-10-2016 4.11 4.17 4.75 4.75 4.11
Liu Linlin    16 12-10-2016 4.56 4.35 4.75 4.11 4.17

使用规定输入格式在DATA步中使用INPUT关键字读取上述的数据,注意也可以用其他方式读取:

DATA test;
INFILE "d:/mydata/test.dat";
INPUT name $13. age 2. +1 birthday DDMMYY10. +1 (Score1 Score2 Score3 Score4 Score5) (4.2);
RUN;
PROC PRINT data = test;
RUN;
  • 打印结果
    打印输出的结果如下表所示:
Obs name age birthday Score1 Score2 Score3 Score4 Score5
1 Wang Xiaoming 14 10-10-2016 4.45 4.35 4.75 4.32 4.36
2 Li Lei 17 15-10-2016 4.17 4.75 4.32 4.75 4.75
3 Zhao Xiaoli 15 16-10-2016 4.11 4.17 4.75 4.75 4.11
4 Liu Linlin 16 12-10-2016 4.56 4.35 4.75 4.11 4.17
  • 说明
  • 变量name的格式是$13.,它表示一个宽度为13列的字符变量;
  • 变量age的输入格式是2.,表示一个宽度为2列的数值变量,只有整数部分,没有小数部分;
  • 变量birthday的输入格式是DDMMYY10.,它表示了10列宽度的日-月-年形式的日期数据;
  • 其它的变量Score1Score5的格式都是4.2,把这几个变量名放在了同一个小括号里,就可以在随后的小括号里只规定一次便适用于所有的变量。

版权声明:
作者:congcong
链接:https://www.techfm.club/p/66874.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>