上面一节讲了SAS的基本概念,以及语法结构,这次主要讲解SAS DATA步读取数据。
   1 ·列表输入
   2 ·按列输入
   3 ·格式化输入 
使用DATA步读取数据的基本形式如下:
DATA  数据集;
INPUT  变量1  <$>   <变量2  <$>   …>;
datalines;
RUN;
·数据集指定要生成的数据集。
·文件引用指定要读入外部原始数据文件。
·变量1、变量2等是数据集的变量,变量与变量之间用空格分隔。 对于字符变量则需在变量后加字符$。

1、 按列表输入数据:需要制定分隔符

(1)   按列表输入:按列表输入需要指定分隔符,默认的分隔符是空格,连续的分隔符会认为是同一个分隔符处理,格式同上面的一样。

原始数据各个字段以空格隔开当原始数据记录中的数据值以一个或多个空格隔开,且数据值中不包含空格时,可使用默认的列表输入方式。

P001R        125.00
P003T 40.00
P301M 500.00
PC02M 100.00

在data窗口里面输入下面的按钮

data  Inventory;
input Product_ID $ Instock Price;
datalines;
P001R 125.00
P003T 40.00
P301M 500.00
PC02M 100.00
;
run;
proc print data=Inventory;
run;

·使用列表输入时,字符变量长度默认为8个字节。当输入数据长度 超过8个字节时,从输入缓冲区读入PDV的数据值会产生截断。这个问 题可以通过在INPUT语句之前使用LENGTH语句指定该变量的长度或其 他方式来解决。

·SAS遇到空格时会停止读入当前数据值,这样SAS就不能处理原始 数据记录中的数据值包含空格的情况了。

·原始数据中必须使用占位符(.)来表示该数据值为缺失值。

(2)使用LENGTH语句指定字符变量长度 指定变量长度的LENGTH语句的基本形式如下:

LENGTH     变量1     <$>长度    <变量2     <$>长度    …>;

通常在变量第一次出现时程序会根据上下文环境确定其长度。可以 在INPUT语句前通过LENGTH语句明确指定变量长度。如下面的数据,可以采用,部分长度大于8个字符

WA Washington
CA California
AK Alaska
AL Alabama

应该使用下面的语句,来进行调用。

data  saslib.state;
length State $;
input Short_Name $ State $;
datalines;
WA Washington
CA California
AK Alaska
AL Alabama
;
run;
proc print data=saslib.state noobs;
run;

2、按列输入

当原始数据记录中的数据值在每条记录中占据相同的列时,可使用按列输入的方式。按列输入(Column Input)可以读取固定列的数据,如下面的数据。

C001 Bridge  St.       San Francisco  CA
C002 Emily Cooker Rue Marston
C002 Rue Marston Paris
C005 Jimmy Cruze Box 100 Cary NC

该读入方式的INPUT语句基本形式如下:

INPUT 变量1 <$>  开始列<-结束列>  <变量2 <$>开始列<-结束列>  …>;
其中:
·变量名后有$表示该变量为字符型变量。
·开始列-结束列指定变量在原始数据记录中所处的位置。
·变量长度由为该变量指定的列数确定,可以超过8个字节。
·按列输入可读入包含空格的数据值。
·可以处理数据中的缺失值,不需要使用占位符。

在data窗口里面输入下面的代码

data  saslib.customer;
input Customer_ID $ - Name $ - Address $ - City $ - State $ -
;
datalines;
C001 Bridge  St.     14  San  Francisco  CA
C002 Emily Cooker    42  Rue  Marston   
C002                 52  Rue  Marston    Paris
C005 Jimmy Cruze Box 100 Cary    NC
;
run;
proc print data=saslib.customer noobs;
run;

3、 格式化输入

二进制数据、日期/时间(01FEB2013),或者包含逗号(1,262)、货币符号($87.3)等特殊字符的数字值。在这种情况下,就需要使用格式化 输入(formatted input)了,即在INPUT语句中提供特殊的指令,以便 SAS正确地读取原始数据记录中的数据值。这些特殊指令称为输入格式(Informat)。格式化输入组合了按列输入特征和读取非标准化数字或 字符值的能力,保证数据值可正确地从原始数据记录中读入。

 INPUT  变量  <$>   输入格式;

SAS提供的输入格式有:数值型(数值与日期时间型)。同时还支持自定义格式。

data  user.sales;
input Emp_ID $- Dept $- + Sales comma6. @ Date date9.;
datalines;
ET001 TSG $ 01JAN2012
ED002 $ 01FEB2012
ET004 TSG $ 02MAR2012
EC002 CSG $ 01APR2012
ED004 QSG 01AUG2012
;
run;
proc print data=user.sales noobs;
run;

上述input代码解读:

input  Emp_ID  $1-5  Dept  $7-9  +1  Sales  comma6.  @18  Date  date9.;

·第1~5列写入Emp_ID,列控制指针在第6列。

·第7~9列写入Dept,这时列控制指针在第10列。

·+1将列控制指针移到第11列。

·开始读入comma6.中指定的6列,即将第11~16列使用输入格式转换 后写入Sales,这时列控制指针在第17列。

·@22将控制指针直接移到第22列,读入date9.中指定的9列,即第22~30列,然后使用该输入格式进行转换,并写入Date。

常用数字与字符输入格式:

表2.1常用数字和字符输入格式

表2.2 常用的SAS日期、时间、日期时间输入格式

4、带修饰的列表输入

在学习格式化输入时,我们知道了输入格式的概念。本节将列表输入、输入格式和修饰符结合起来,结合后就成了带修饰的列表输入(modified list input),这样可以使用列表输入方式更灵活地读入数 据。前面讲到列表输入时,提到列表输入的一些限制,例如所创建的变 量长度为8个字节、默认(分隔符为空格时)不能读入包含嵌入空格的 数据值、不能处理带特殊字符的数字值和日期等。SAS提供如下格式的 修改符来消除这些限制,进而增加了列表输入的灵活性。

5、命名输入

命名输入(named input)读取包含变量名、等于符号和变量值的输入数据,例如Name=Willam。

C001   Name=Willam  Age=
C002 Name=Emily Age=
C002 Name=Geroge Age=
C005 Name=Jimmy Age=

命名输入的基本形式如下:

INPUT  变量1= <$>       <变量2=      <$>   …>;
data  user.customer;
input Customer_ID $ Name= $ Age=;
datalines;
C001 Name=Willam Age=
C002 Name=Emily Age=
C002 Name=Geroge Age=
;
run;
proc print data=user.customer noobs;
run;

SAS DATA步读取数据的更多相关文章

  1. SAS 读取数据文件

    每次读取数据时需要告诉SAS3件事:1:数据存在哪里?2:数据的形式3:创建的数据集的类型(永久/临时) 1 读取SAS数据集 DATA temp; /*temp 为创建的数据集名称*/ INFILE ...

  2. SAS数据步与过程步,数据步语句

    SAS数据步与过程步,数据步语句http://www.biostatistic.net/thread-2045-1-1.html  ---转载---原文作者:biostar(出处: 生物统计家园) 数 ...

  3. SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集

    SAS进阶<深入解析SAS>之Base SAS基础.读取外部数据到SAS数据集 前言:在学习完<SAS编程与商业案例>后,虽然能够接手公司的基本工作,但是为了更深入的SAS学习 ...

  4. SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...

  5. HR数据抽取:通过 Read Master Data 转换规则读取时间相关主属性数据

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. R语言data.table包fread读取数据

    R语言处理大规模数据速度不算快,通过安装其他包比如data.table可以提升读取处理速度. 案例,分别用read.csv和data.table包的fread函数读取一个1.67万行.230列的表格数 ...

  7. echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端

    1.echarts的官网上的demo,都是直接写死的随机数据,没有和数据库的交互,所以就自己写了一下,ok,我们开始一步一步走一遍整个流程吧. 就以官网最简单的那个小demo来做修改吧.官网上的小de ...

  8. 【转】基本数据持久性(一) 使用plist保存和读取数据

    原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...

  9. SQL Server数据库读取数据的DateReader类及其相关类

    之前学了几天的SQL Server,现在用C#代码连接数据库了. 需要使用C#代码连接数据库,读取数据. 涉及的类有: ConfigurationManage SqlConnection SqlCom ...

随机推荐

  1. 涂抹mysql笔记-InnoDB/MyISAM及其它各种存储引擎

    存储引擎:一种设计的存取和处理方式.为不同访问特点的表对象指定不同的存储引擎,可以获取更高的性能和处理数据的灵活性.通常是.so文件,可以用mysql命令加载它. 查看当前mysql数据库支持的存储引 ...

  2. 搭建Tomcat应用服务器、tomcat虚拟主机及Tomcat多实例部署

    一.环境准备 系统版本:CentOS release 6.6 (Final) x86_64 Tomcat版本:tomcat- JDK版本:jdk-8u25-linux-x64 关闭防火墙 软件包下载地 ...

  3. python3:实现字符串的全排列(有重复字符)

    抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321. 解决方案 #字符串任意两个位置字符交换 def str_replace(str, x ...

  4. java反射的性能问题

    java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考. 测试背景: 1. 测试简单Bean(int,Integer,String)的set方法2. loop 1亿次3. 测试代码尽可能 ...

  5. 如何解决python 图表中文显示乱码问题(matlplotlib 包)

    目前搜到的是,下载一个字体到程序路径,设置成默认字体.  https://blog.csdn.net/irene_loong/article/details/68955485 #图表显示中文设置 im ...

  6. Linux常用基础操作命令大全(超实用精心整理)

    相信大家都对黑客那种只用命令行对电脑操作的风格惊呆了,其实你也可以做到.linux是一款不同于windows的操作系统,而且它是黑客.渗透人员.运维人员等等必会的.如果你想学习,小编下面整理的命令将会 ...

  7. Nmap扫描命令使用详解

    Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在实施这些扫描工作之前,需要先简单 ...

  8. SqlServer中的UNION操作符在合并数据时去重的原理以及UNION运算符查询结果默认排序的问题

    本文出处:http://www.cnblogs.com/wy123/p/7884986.html 周围又有人在讨论UNION和UNION ALL,对于UNION和UNION ALL,网上说的最多的就是 ...

  9. Hibernate 再接触 悲观锁和乐观锁

    为什么取1248 二进制 CRUD 移位效率高 在并发和效率选择一个平衡点 一般不会考虑幻读 因为我们不会再一个事务里查询两次,(只能设置为seralizable) 悲观锁和乐观锁的前提是read-u ...

  10. javascript正则表达式中 (?=exp)、(?<=exp)、(?!exp)

     (?=exp) 百度百科给的解释:非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用.例如,“Windows(?=95|98|NT|2000) ...