上面一节讲了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. SQLSERVER创建该存储过程时不会出错,但是执行存储过程时报错

    创建该存储过程时,不会出错,但是执行存储过程时,会报出下面这样的错误 这是因为在存储过程创建时,它先做语法检查,如果通过了语法检查,它会尝试解析它包含的对象名,如果存在也会解析该对象引用的对象是否存在 ...

  2. html5 + vue

    偶然与巧合 舞动了蝶翼 谁的心头风起 前赴而后继 万千人追寻 荒漠唯一菩提 似擦肩相遇 或擦肩而去 命运犹如险棋 无数时间线 无数可能性 终于交织向你

  3. Core Graphices 设置渐变

    Core Graphices 设置渐变 Quartz 提供了两种设置渐变的方式  CGShadingRef and CGGradientRef 尝试CGGradientRef 的使用 import & ...

  4. atom常用插件

    汉化 simplified-chinese-menureact atom-react-snippets-0.5.0polymer atom-polymer-0.13.0polymer Atom-Pol ...

  5. 在BootStrap的modal中使用Select2搜索框无法输入

    用modal来show一个对话框 dialog.modal({ backdrop:true, keyboard:true, show:true }); 1 2 3 4 5 然后再modal中初始化se ...

  6. vim相关

    保存和传递宏 1 先建立一个宏.如上 2 在任意一个文件的空白位置normal状态下,命令"ap 即可以把宏的内容显示出来.比如说我的宏是: "ohello th id<80 ...

  7. 转载:oracle 启动过程--oracle深入研究

    Oracle数据库的启动-nomount状态深入解析 通常所说的Oracle Server主要由两个部分组成:Instance和Database.Instance是指一组后台进程(在Windows上是 ...

  8. GIT TEAMWORK

    Learn GIT TEAMWORK generalizations Congratulations, you now know enough to start collaborating on Gi ...

  9. 一分钟搭建Spring Boot

    1.首先你的电脑需要安装jdk.Apache Maven.Intellij IDEA 2.新建项目  (敲重点,有的同学有没有Spring Initializr 这个请到本文章后面看安装步骤) 3.选 ...

  10. Vue.js组件之间的调用

    index.html: <div id="app"></div> 运行完index.html之后自动寻找运行main.js文件 main.js: impor ...