SAS编程基础 - 数据获取与数据集操作(1)
1. 数据来源
SAS数据来源主要有两种:一是通过input语句创建,另外一种方式是通过外部数据文件获取。
1.1 libname
1.2 odbc
1.3 passthrough
1.4 import
1.5 input
该方式是在SAS系统下通过input语句输入SAS数据块,实践中是最不常的用的一块。
2. set语句
从一个或者多个SAS数据集中读取观测值并实现纵向合并。
2.1 keep=选项
data keep;
set sashelp.class(keep = age sex);
run;
该方式创建了一个临时数据集keep(输出数据集),然后使用set语句从数据集sashelp.class中获取数据,keep=指定了读入的变量,其他冗余变量不读取,最后将读取的变量输入到数据集keep中。
还可以输出两个或者多个数据集:
data d1(keep=name)d2(keep=name sex);
set sashelp.class(keep=name sex);
run;
输出数据集d1和d2,并且分别在每个数据集后使用keep=指定了输出的变量。在set语句中使用keep=语句,可以提高运行效率,因为它使得set语句从数据集class中只读取了name和sex两个变量到PDV中。去掉这里的keep=不会报错,但是效率会降低。进一步,如果将这里的keep修改为“keep=name”,即去掉sex,那么导致的结果是数据集d2中只包含name变量,而不包含sex变量,这是因为set语句没有读取sex变量,自然不会输出到d2中。
2.2 rename=选项
将变量名重新命名:
data rename;
set sashelp.class(keep = name sex rename=(name=name_new sex=sex_new));
run;
对重命名变量需要用括号括起来。
2.3 where表达式
添加筛选条件:
data where;
set sashelp.class(keep=name sex where=(sex='男'));
run;
读取性别为男的人的姓名和性别。可以通过keep=的方式只输出性别为男的人的姓名,只需要将第一行修改为“data where(keep=name);”即可。注意,不能通过去掉class后面的sex实现,因为这里的keep指定的是读取变量,否则读取不到sex就无法完成where后的sex条件判断,就会报错。
2.4 in选项
把set语句后面不同的数据集通过标识变量显示出来:
data one;
input x y$ @@;
cards;
1 a 2 b 3 c
;
data two;
input x z$ @@;
cards;
4 d 5 e
; data in1;
set one(in=ina) two(in=inb);
in_one = ina;
in_two = inb;
run;
如果一行的观测来源于数据集one,那么对一个的in_one的值是1,in_two的值为0.相反,如果该行观测来源于数据集two,那么in_one的值为0,in_two的值为1.简单来说,就是标识一下该行变量来源。
in本身不是个变量,所以不能通过in_one=in的形式得到标识变量,于是就先创建一个临时变量ina,然后把临时变量的值赋给输出变量in_one。
还可以通过if语句实现标记:
data in2;
set one(in=ina) two(in=inb);
if ina=1 then flag=1;else flag =0;
run;
in选项可以标记观测的来源,那么就可以使用in选项对不同来源的数据进行不同的操作。
2.5 firstobs=和obs=
读取数据集中指定行到行的观测:
data obs;
set sashelp.class(firstobs=3 obs=5);
run;
读取class数据集中第3行到第5行的数据,包括第3和第5行。firstobs和obs都可以缺省,如果缺省firstobs代表默认为从第一个开始到obs指定的行,如果缺省obs,则代表默认为从firstobs指定的行到最后位置。两者都缺省,实质上就是未指定范围,即读取全部观测。
2.6 nobs=
2.7 point=
2.7.1 取指定的一条观测
data point1;
n=3;
set sashelp.class point=n;
output;
stop;
run;
读取第3条观测,注意point=后边必须跟变量,如果直接写成point=3是错误的。使用output输出第3条观测,使用stop终止运行。注意,如果没有output则不能将观测输出到数据集中,如果没有stop会使程序陷入死循环,数据指针无法判断是否指向了最后一条观测。stop经常和point搭配使用。
2.7.2 取指定的多条观测
data point2;
do n=2,4,6,7;
set sashelp.class point=n;
output;
end;
stop;
run;
output与end的位置不能互换,互换后只输出最后一条观测,即第7条观测。
2.8 nobs=和point=综合应用
快速读取最后一条观测:
data nobs_point;
set sashelp.class nobs=last point=last;
output;
stop;
run;
2.9 end=
文件是否结尾的标识:
data end;
set sashelp.class end=last_obs;
flag = last_obs;
run;
2.10 具有相同数据结构的多个数据集的合并
data concatenat;
set sashelp.class sashelp.class(obs=10);
run;
2.11 使用output控制输出到多个数据集
data d1 d2;
set sashelp.class;
if _n_ le 10 then output d1;
else output d2;
run;
_N_表示当前数据指针指向的行。output指定输出的数据集。另外注意,SAS中的if语句不带end。
SAS编程基础 - 数据获取与数据集操作(1)的更多相关文章
- SAS编程基础 - 逻辑库和数据集
1. SAS逻辑库 1.1 创建SAS逻辑库: libname lb 'F:\Data_Model'; libname是关键字,lb是创建的逻辑库的名称,引号内的内容是目录路径,最后一个分号结束程序语 ...
- SAS编程基础 - 菜鸟入门常用操作
1. SAS9.4添加和取消注释的快捷键? Ctrl+/:添加注释 Ctrl+Shift+/:取消注释 2. 如何强制终止程序运行? 看到那个圆圈里带叹号的图标了吗?没错,就是它 - 中断! 3. 如 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(2)数据获取与数据集操作
SAS学习笔记之<SAS编程与数据挖掘商业案例>(2)数据获取与数据集操作 1. SET/SET效率高,建立的主表和建表索引的查询表一般不排序, 2. BY语句,DATA步中,BY语句规定 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(1)系统简介和编程基础
SAS学习笔记之<SAS编程与数据挖掘商业案例>(1)系统简介和编程基础 1. SAS系统简介 1.1 SAS是先编译后执行的语言,data步标志着编译的开始. 数据指针:当前内存缓存区, ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之<SAS编程与数据挖掘商业案例>(3)变量操作.观测值操作.SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 ...
- SAS基础 -- SAS编程入门
SAS语言 -- 简介 SAS语言是一种专用的数据管理与分析语言,它提供了一种完善的编程语言.类似于计算机的高级语言,SAS用户只需要熟悉其命令.语句及简单的语法规则就可以做数据管理和分析处理工作 ...
- 操作系统内核Hack:(二)底层编程基础
操作系统内核Hack:(二)底层编程基础 在<操作系统内核Hack:(一)实验环境搭建>中,我们看到了一个迷你操作系统引导程序.尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识 ...
- [.net 面向对象编程基础] (19) LINQ基础
[.net 面向对象编程基础] (19) LINQ基础 上两节我们介绍了.net的数组.集合和泛型.我们说到,数组是从以前编程语言延伸过来的一种引用类型,采用事先定义长度分配存储区域的方式.而集合是 ...
- IOS学习之十七:Grand Central Dispatch(GCD)编程基础
IOS学习之十七:Grand Central Dispatch(GCD)编程基础 有过编程经验的人,基本都会接触到多线程这块. 在java中以及Android开发中,大量的后台运行,异步消息队列, ...
随机推荐
- R in action读书笔记(7)-第七章:基本统计分析(下)
7.3相关 相关系数可以用来描述定量变量之间的关系.相关系数的符号(±)表明关系的方向(正相关或负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1).除了基础安装以外,我们还将使 ...
- R in action读书笔记(6)-第七章:基本统计分析(中)
7.2 频数表和列联表 > library(vcd) > head(Arthritis) ID Treatment Sex Age Improved 1 57 Treated Male 2 ...
- iOS 时间和时间戳之间转化
以毫秒为整数值的时间戳转换 时间戳转化为时间NSDate - (NSString *)timeWithTimeIntervalString:(NSString *)timeString { // 格式 ...
- jquery 微信端 点击物理返回按钮,弹出提示框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java基础(十三)--深拷贝和浅拷贝
在上篇文章:Java基础(十二)--clone()方法,我们简单介绍了clone()的使用 clone()对于基本数据类型的拷贝是完全没问题的,但是如果是引用数据类型呢? @Data @NoArgsC ...
- NET SignaiR 实现消息的推送,并使用Push.js实现通知
一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...
- SQL Server中 sysobjects、sysolumns、systypes
1.sysobjects 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等 在大多数情况下,对你最有用的两个列是Sysobjects.name和Sysobjects.x ...
- python清除字符串中无用字符
将列表val_list中包含的非法字符去掉,illegal_char是非法字符列表 def clear(): illegal_char = [' ','#','%','_','@'] tmp_list ...
- java中引用对比C++指针
前置知识地址:https://blog.csdn.net/wangfei8348/article/details/51383805 重点在后面的引用对比实验(测试出内存地址,我很开心哈哈哈,客观给个好 ...
- 用SQLyog或Navicat远程连接数据库
以SQLyog为例(Navicat同理): 登录远程数据库服务器查看当前存在用户:即点击用户管理器(人像图标),查看用户. 1)如果某一用户 主机一栏中是"%",则表示本用户是开放 ...