上面一节讲了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. Webservices部署在IIS6.0上的一个小问题

    部署方式还是跟网站的部署方式一样,可是通过localhost访问一直提示400(bad request)错误. 可以在iis上预览到.在vs上引用的时候怎么都预览不到. 换个思路,把localhost ...

  2. [UE4]CheckBox

    一.CheckBox默认情况下是比较小的 二.要让CheckBox变大,最简单的方法就是直接设置Transform.Scale,但如此一来CheckBox就变得模糊了. 三.CheckBox控件是在C ...

  3. MyEclipse 10 + OsChina GIt项目托管

    环境:Egit+MyEclipse 10,此教程默认MyEclipse 10和Egit都已经配置好. 1.注册OsChina Git账号,网址:http://git.oschina.net/,具体注册 ...

  4. Android ScrollView嵌套Recyclerview滑动卡顿,松手即停问题解决;

    假如你的布局类似这样的: <ScrollView android:layout_width="match_parent" android:layout_height=&quo ...

  5. leetCode21: 合并两个有序列表

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...

  6. Linux配置Supervisor 配置遇到的坑

    在linux中web 应用部署到线上后之后发现退出终端后网站就无法访问了 所以需要用Supervisor来守护进程,它可以保证应用一直处于运行状态,在遇到程序异常.报错等情况,导致 web 应用终止时 ...

  7. Java的synchronized的同步代码块和同步方法的区别

    synchronized同步方法和同步代码块的区别 同步方法默认使用this或者当前类做为锁. 同步代码块可以选择以什么来加锁,比同步方法更精确,我们可以选择只有会在同步发生同步问题的代码加锁,而并不 ...

  8. unity编程心得

    1.  不要通过public变量 从工程面板 直接 拖 GameObjct 的引用, 当这样的public变量很多 ,子物体很多,又没有做成预制体,,别人重新移植这段功能会很麻烦,,应该用GameOb ...

  9. SpringJDBC :jdbcTemplate在连接是出现 org/springframeworkbc/core/JdbcTemplate : Unsupported major.minor version 52.0 异常解决

    原因是这个在jdk9版本才能使用,需更新jdk版本. 更新jdk9之后在idear的配置: 第一步:File---->Project Structure---->Project 第二步: ...

  10. 【笔记】计算机原理,网络,Linux操作系统

    一,计算机原理 1,化繁为简的思想,产生二进制,产生把所有计算归结为加法运算 二,网络 1,分层思想,产生ISO七层协议,商用了TCP/IP的五层协议 三,Linux操作系统 1,分层思想,硬件-&g ...