SAS

您所在的位置:网站首页 formats怎么读 SAS

SAS

2023-12-18 01:23| 来源: 网络整理| 查看: 265

目录1 导入数据的方法2 利用导入向导读入3 格式规范数据读取3.1 指定原始数据位置(infile)3.2 读取空格分隔原始数据(列表输入)3.3 读取按列排列原始数据(列输入)3.4 读取非标准格式的原始数据(格式化输入)3.5 混合的输入样式(列表输入+列输入+格式化输入)

 

1 导入数据的方法

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

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

 

2 利用导入向导读入

导入向导默认数据第一行作为变量名称,并会自动扫描文件来决定变量的类型。使用导入向导导数一般分以下几个步骤:

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

 

3 格式规范数据读取 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;

 

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;

 

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

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

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

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

  INPUT语句

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

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

 

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 常用输入格式。

 

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

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

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

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

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

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

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

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

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3