SAS 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步读取数据的更多相关文章
- SAS 读取数据文件
每次读取数据时需要告诉SAS3件事:1:数据存在哪里?2:数据的形式3:创建的数据集的类型(永久/临时) 1 读取SAS数据集 DATA temp; /*temp 为创建的数据集名称*/ INFILE ...
- SAS数据步与过程步,数据步语句
SAS数据步与过程步,数据步语句http://www.biostatistic.net/thread-2045-1-1.html ---转载---原文作者:biostar(出处: 生物统计家园) 数 ...
- SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集
SAS进阶<深入解析SAS>之Base SAS基础.读取外部数据到SAS数据集 前言:在学习完<SAS编程与商业案例>后,虽然能够接手公司的基本工作,但是为了更深入的SAS学习 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制
SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...
- HR数据抽取:通过 Read Master Data 转换规则读取时间相关主属性数据
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- R语言data.table包fread读取数据
R语言处理大规模数据速度不算快,通过安装其他包比如data.table可以提升读取处理速度. 案例,分别用read.csv和data.table包的fread函数读取一个1.67万行.230列的表格数 ...
- echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端
1.echarts的官网上的demo,都是直接写死的随机数据,没有和数据库的交互,所以就自己写了一下,ok,我们开始一步一步走一遍整个流程吧. 就以官网最简单的那个小demo来做修改吧.官网上的小de ...
- 【转】基本数据持久性(一) 使用plist保存和读取数据
原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...
- SQL Server数据库读取数据的DateReader类及其相关类
之前学了几天的SQL Server,现在用C#代码连接数据库了. 需要使用C#代码连接数据库,读取数据. 涉及的类有: ConfigurationManage SqlConnection SqlCom ...
随机推荐
- CSS之display
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 搭建Tomcat应用服务器、tomcat虚拟主机及Tomcat多实例部署
一.环境准备 系统版本:CentOS release 6.6 (Final) x86_64 Tomcat版本:tomcat- JDK版本:jdk-8u25-linux-x64 关闭防火墙 软件包下载地 ...
- Python有趣时刻,这些代码让你大呼"卧槽,怎么会这样"
分享一个实用问题,用python读取Excel并保存字典,如何做? 下面是该同学问题截图和代码 image.png 代码截图是下面这样的 image.png 不知道大家第一眼看了这个代码,什么感受?我 ...
- AtomicInteger类和int原生类型自增鲜明的对比
AtomicInteger这个类的存在是为了满足在高并发的情况下,原生的整形数值自增线程不安全的问题.比如说 int i = 0 ; i++; 上面的写法是线程不安全的. 有的人可能会说了,可以使 ...
- Pycharm:使用笔记
1.快捷键笔记 CTRL+D:复制当前行 CTRL+/:注释选中行 CTRL+ALT+L:自动format,自动进行标准格式化 ALT + 7:查看当前文件的类和方法概览 Ctrl + Y 删除 ...
- Jenkins部署报weblogic.deploy.api.tools.deployer.DeployerException: Java heap space
Jenkins部署报weblogic.deploy.api.tools.deployer.DeployerException: Java heap space异常 解决办法: 在MAVEN_OPTS中 ...
- 收藏 —— KVM网络虚拟化
http://www.cnblogs.com/CloudMan6/p/5240770.html http://www.cnblogs.com/CloudMan6/p/5289590.html
- springBoot框架的搭建
1新建一个项目: 2.注意选择JDK1.8,和选择spring initializr加载springBoot相关jar包: 3.下一步next: 4.下一步next,选择Web和MyBatis然后ne ...
- Linux命令:pwd
打印当前目录的完全路径. -L 打印路径包含符合路径 -P 打印路径不含符合路径. -LP,可能打印的不同,取决于你对进入当前目录的方式是通过符号链接进入,还是物理目录进入.如果是符号链接进入,则-L ...
- suse linux安装lrzsz
1.从下面的网站下载 lrzsz-1.12.20.tar.gz http://www.filewatcher.com/m/lrzsz-0.12.20.tar.gz.280938.0.0.html 2. ...