第二章 导入数据到SAS | 格式规范数据读取

目录

  • 2.1 导入数据的方法
  • 2.2 利用导入向导读入
  • 2.3 格式规范数据读取
    • 2.3.1 指定原始数据位置(infile)
    • 2.3.2 读取空格分隔原始数据(列表输入)
    • 2.3.3 读取按列排列原始数据(列输入)
    • 2.3.4 读取非标准格式的原始数据(格式化输入)
    • 2.3.5 混合的输入样式(列表输入+列输入+格式输入)

2.1 导入数据的方法

将数据导入SAS的方法有很多,但可以归纳为四个基本类别,其中方法2、3是需要掌握的重点。

  1. 直接将数据输入SAS数据集

    • 通过VIEWTABLE窗口(打开方式:工具 → 表编辑器),以表格形式导入
    • 通过SAS Enterprise Guide窗,以表格形式导入
  2. 利用原始数据文件创建SAS数据集
    • 通过data步导入
    • 通过导入向导 或 有类似功能的import过程导入
  3. 将其他软件的数据文件转换成SAS数据集
    • 通过data步或import过程,把其他类型的数据文件读成SAS数据集
  4. 直接读取其他软件的数据文件

2.2 利用导入向导读入

导入向导默认数据第一行作为变量名称,并会自动扫描文件来决定变量的类型

使用导入向导导数一般分以下几个步骤:

  • 启动:文件 → 导入数据
  • 选择导入文件类型
  • 选择导入文件
  • 选定分隔符:左击options选择,csv和制表符(Tab)分隔文件SAS会自动识别
  • 指定逻辑库和数据集名称
  • fish结束

2.3 格式规范数据读取

2.3.1 指定原始数据位置(infile)

根据原始数据存储的不同位置,可以分为内部原始数据、外部原始数据。用infile语句来指定元数数据位置。

内部原始数据

如果在SAS程序中输入数据,则这些数据被称为内部原始数据,使用「datalines语句」表明它。需注意的是,datalines语句必须是data步最后一条语句,其后的所有行都将被视为数据行,直到遇到一个分号(;)为止。

*将内部原始数据读入到SAS数据集;
data work.testdata;
    input president $ party $ number;    /* 输入指定类型的3个变量 */
    datalines;                           /* 数据线 */
Adams F 2
Lincoln R 16
Grant R 18
kennedy D 35
;
run;

外部原始数据

更常见数据是保存在外部文件中,这时数据与程序是分离的,就称为外部原始数据。需要用「infile语句」告知SAS文件名和路径,infile语句紧跟在data语句之后,input语句之前,且不同操作环境中路径表示有差异:

操作环境 infile语句
windows infile ‘D:\code\test.dat‘;
unix infile ‘/home/rds/test.dat‘;
os infile ‘mydir.test.dat‘;

长记录

当从外部数据文件读入数据时,务必记得「检查日志」,因为一些非常有价值的信息,会在日志中体现,如观测数、变量数、记录最大/最小长度。

若外部文件中记录长度超过了256个字符,且SAS没有读取到所有数据,这时可以在infile语句中使用lrecl=选项,指定一个至少和数据文件中最长记录等长的长度。

*从外部原始数据读入数据到SAS数据集;
data work.testdata;
    infile infile 'D:\code\test.dat' lrecl = 300;   /* 指定记录长度最大为300个字符 */
    input president $ party $ number;
run;

2.3.2 读取空格分隔原始数据(列表输入)

如果原始数据文件中的所有值,都被至少一个空格分隔开,建议使用列表输入(list input)读入该原始数据,该方法也被称为自由格式输入。

下面是列表输入的优缺点:

  • 优点:简单好用
  • 缺点:
    • 只能读取一条记录中全部数据,不能跳过不需要的值
    • 如果有字符型数据,那它必须没有内嵌空格,且长度不超过8个字符
    • 如果数据文件含日期、其他特殊格式数据,那列表输入不适用

特别注意,列表输入也可用于读取其他分隔符数据文件,如逗号或制表符。并且,可以使用length语句去覆盖长度不超过8个字符的限制,使字符变量长度变成1 ~ 32767之间任意值。

INPUT语句

列表输入是通过input语句实现数据读入,语法规则如下:

  • 在input关键字后,按照变量名称出现顺序依次列出它们
  • 变量名称符合命名规则
  • 若变量为字符类型,则在变量名称后面加一个$
  • 变量名称之间至少留一个空格

示例:input toadname $ weight jump1 jump2 jump3;

*使用列表输入,读取数据文件ToadJump.dat;
data toads;
    infile 'D:\code\ToadJump.dat';
    input toadname $ weight jump1 jump2 jump3;
run;

proc print data = toads;
    title '蟾蜍跳跃比赛';
run;

2.3.3 读取按列排列原始数据(列输入)

列输入和列表输入类似,但适用范围更广,具有以下几点优势:

  • 值之间无须空格
  • 缺失值可以留空
  • 字符型数据可以内嵌空格
  • 可以跳过不需要的变量

通常调查数据、带有街道地址的数据集,可采用列输入读取。

INPUT语句

列输入也是通过input语句实现数据读入,语法规则和列表输入类似,区别在于变量之后需要列出该变量对应的列或者列范围,用这些列表示数值或者字符在数据行中的位置。

示例:input Name ¥ 1-10 Age 11-13 Height 14-18;

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

先明确一个概念「标准格式数据」,只包含数字、小数点、正负符号、科学计数法E。其他的都是非标准格式数据,常见的有:

  • 日期
  • 嵌入逗号的数字
  • 嵌入$符号的数值

输入格式

输入格式的三个基本类型是:字符、数值、日期

字符 数值 日期
$informatw. informatw.d informatw.

$表明这是字符型输入格式,imformat是该输入格式的名称,w是总宽度,d是小数位数(仅限数值型输入格式),注意,一定不要少些了句点(.)。有两个输入格式没有名称:?

  • $w. 用来读取标准的字符型数据
  • w.d 用来读取标准的数值型数据

格式化输入

在input语句的变量名称之后放置输入格式,称为格式化输入。

示例:input name $10. age 3. height 5.1 birthdate mmddyy10. ;

先明确一个概念:为每个变量读取的列,由起始点和输入格式的宽度所决定。所以,上面的示例代码就能解读为:

  • name($10.):字符型数据,默认起始列在第1列,name数据在第1 ~ 10列
  • age(3.):数值型数据,起始列在第11列,往后取3列
  • height(5.1):数值型数据,起始列在第14列,往后取5列,小数位数为1
  • birthdate(mmddyy10.):日期数据,格式为月-日-年,能读取诸如10-31-2013或10/31/2013格式的日期,起始列在第19列,往后取10列
*读取非标准格式的原始数据;
data zdata.contest;
    infile 'D:\data\sas_file\pumpkin.dat';
    input name $16. age 3. +1 type $1. +1 date mmddyy10.  /* +1表示跳过一列 */
          (score1 score2 score3 score4 score5) (4.1);
run;

有相同输入格式,把变量和输入格式分别放到括号中,输入格式只列出一次 即可。

更多常见的常见输入格式见page49,第二章 2.8 常用输入格式。

2.3.5 混合的输入样式(列表输入+列输入+格式输入)

前面学习了三种主要的输入样式:

  • 列表输入:最简单
  • 列输入:稍微难一点
  • 格式化输入:最复杂

因为SAS中数据格式多种多样,没有一种输入样式能满足绝大多数需求。所,更多时候我们采用混合的样式输入。

示例:input parkname $ 1-22 state $ year @40 acreage comma9. ;

上面的示例就采用了多种样式的组合:

  • parkname ($ 1-22):列输入
  • state($):列表输入
  • year:列表输入
  • acreage (comma9):格式化输入

此外,还用了列指针,语法@n,n指SAS要移动到的列,常用来在一行数据里向前或者向后移动,以调整数据读取起始位置,应用场景有:

  • 跳过不需要的数据
  • 使用不同的输入格式两次读取同一个变量

原文地址:https://www.cnblogs.com/1k-yang/p/12133258.html

时间: 2024-10-08 18:12:18

第二章 导入数据到SAS | 格式规范数据读取的相关文章

第二章 Servlet 接口(JavaTM Servlet 规范3.1 )

Servlet 接口 Servlet 接口是 Java Servlet API 的核心抽象.所有 servlet 要么直接要么间接地实现该接口,通过扩展一个类实现此接口.在 Java Servlet API 中有两个类 GenericServlet 和 HttpServlet 实现了此 Servlet 接口.为了更多目的,开发者将扩展 HttpServlet 来实现他们的 servlet. 2.1 请求处理方法 为处理客户端请求,基础 Servlet 接口定义了一个 service 方法.ser

利用 js-xlsx 实现 Excel 文件导入并解析Excel数据成json格式的数据并且获取其中某列数据

演示效果参考如下:XML转JSON 另一个搭配SQL实现:http://sheetjs.com/sexql/index.html 详细介绍: 1.首先需要导入js <script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script> 2.导入文件框 这里importExcel(this)是方法,名字可以自己定义. <input type="file"onchang

hive中导入json格式的数据(hive分区表)

hive中建立外部分区表,外部数据格式是json的如何导入呢? json格式的数据表不必含有分区字段,只需要在hdfs目录结构中体现出分区就可以了 This is all according to this guide: http://blog.cloudera.com/blog/2012/12/how-to-use-a-serde-in-apache-hive/ 1 hive> ADD JAR /home/hadoop/hive-serdes-1.0-SNAPSHOT.jar; 2 Added

第二章 变量和数据类型

课时6:数据和数据类型 1.数据及数据类型 数据:指有用的信息 数据类型:对数据的分类 2.C#语言中的数据类型 Char字符类型 单个文字 (汉字,字母,数字,标点符号) 成对英文单引号表示 'A' string字符串类型 不限数量文字 (汉字,字母,数字,标点符号) 成对英文单引号示 "A" int整数类型 (简称整型) 表示一个整数 直接书写 100 double小数类型 表示包含小数点的数字 直接书写 1.1 课时7:认识变量 1.认识变量:一块存储数据的内存空间,并且该内存区

Hive Hue的导出XLS格式,数据不全

在使用Hive Hue查询出结果之后,点击按钮[以XLS格式下载结果]导出的数据文件不完整. 下图是按照XLS和CVS格式导出的文件大小比较的图片,明显按照cvs格式导出的文件数据比xls格式的数据多 无奈,暂时只能导出csv,然后另存为成xls格式.

CDA数据分析【第二章:数据收集与导入】

一.概述 数据是对我们所研究现象的属性和特征的具体描述,在分析数据前必须要做的工作就是收集数据.按照存储形式可以将数据划分为结构化数据.非结构化数据和半结构化数据. 1.结构化数据 能够用数据或统一的格式加以表示,简单来说就是数据库. 2.非结构化数据 无法用数据或统一的结构加以表示,如视频.音频.图片.文档等形式. 3.半结构化数据 包括邮件.HTML.报表.资源库等. 二.SQL语言和MySQL 数据库,顾名思义,是存放数据的仓库.严格地讲,数据库是长期存储在计算机内.有组织的.可共享的大量

第二章 数据,变量和计算

头文件 #include <>或#include "" <> 强制类型转换 double a=1.6; cout<<static_cast<int>(a)<<endl; 输出为1 注意旧的强制类型转换为int(a),这比新的更容易出错,得不到想要的结果,所以推荐static_cast<转换成的类型>() 自动判断数据类型 auto n=16; 自动判断n的类型为int const auto e=1.1; 自动判断静

Laxcus大数据管理系统(5)- 第二章 数据组织

第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同时出于兼顾用户使用习惯和简化数据处理的目的,继续沿用了一些关系数据库的设计和定义,其中不乏对SQL做适量的修订.在这些变化中,核心仍然是以关系代数的理念去处理数据,以及类自然语言风格的数据描述.所以用户在使用体验上,和关系数据库相比,不会感觉到有太多的差异. 本章将介绍Laxcus数据结构的组成,并

《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型 (转)

第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以跳过本章. 本章将带你漫游使用实体框架建模的基本实例,建模是实体框架的核心特性,同时也是区别实体框架和微软早期的数据访问平台的特性.一旦建好模,你就可以面向模型编写代码,而不用面向关系数据库中的行和列. 本章以创建一个简单概念模型的实例开始,然后让实体框架创建底层的数据库,剩下的实例,将向你展示,如