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语句后面不同的数据集通过标识变量显示出来:

 1 data one;
 2 input x y$ @@;
 3 cards;
 4 1 a 2 b 3 c
 5 ;
 6 data two;
 7 input x z$ @@;
 8 cards;
 9 4 d 5 e
10 ;
11
12 data in1;
13 set one(in=ina) two(in=inb);
14 in_one = ina;
15 in_two = inb;
16 run; 

如果一行的观测来源于数据集one,那么对一个的in_one的值是1,in_two的值为0.相反,如果该行观测来源于数据集two,那么in_one的值为0,in_two的值为1.简单来说,就是标识一下该行变量来源。

in本身不是个变量,所以不能通过in_one=in的形式得到标识变量,于是就先创建一个临时变量ina,然后把临时变量的值赋给输出变量in_one。

还可以通过if语句实现标记:

1 data in2;
2 set one(in=ina) two(in=inb);
3 if ina=1 then flag=1;else flag =0;
4 run;

in选项可以标记观测的来源,那么就可以使用in选项对不同来源的数据进行不同的操作。

2.5 firstobs=和obs=

读取数据集中指定行到行的观测:

1 data obs;
2 set sashelp.class(firstobs=3 obs=5);
3 run;

读取class数据集中第3行到第5行的数据,包括第3和第5行。firstobs和obs都可以缺省,如果缺省firstobs代表默认为从第一个开始到obs指定的行,如果缺省obs,则代表默认为从firstobs指定的行到最后位置。两者都缺省,实质上就是未指定范围,即读取全部观测。

2.6 nobs=

2.7 point=

2.7.1 取指定的一条观测

1 data point1;
2 n=3;
3 set sashelp.class point=n;
4 output;
5 stop;
6 run;

读取第3条观测,注意point=后边必须跟变量,如果直接写成point=3是错误的。使用output输出第3条观测,使用stop终止运行。注意,如果没有output则不能将观测输出到数据集中,如果没有stop会使程序陷入死循环,数据指针无法判断是否指向了最后一条观测。stop经常和point搭配使用。

2.7.2 取指定的多条观测

1 data point2;
2 do n=2,4,6,7;
3 set sashelp.class point=n;
4 output;
5 end;
6 stop;
7 run;

output与end的位置不能互换,互换后只输出最后一条观测,即第7条观测。

2.8 nobs=和point=综合应用

快速读取最后一条观测:

1 data nobs_point;
2 set sashelp.class nobs=last point=last;
3 output;
4 stop;
5 run;

2.9 end=

文件是否结尾的标识:

1 data end;
2 set sashelp.class end=last_obs;
3 flag = last_obs;
4 run;

2.10 具有相同数据结构的多个数据集的合并

1 data concatenat;
2 set sashelp.class sashelp.class(obs=10);
3 run;

2.11 使用output控制输出到多个数据集

1 data d1 d2;
2 set sashelp.class;
3 if _n_ le 10 then output d1;
4 else output d2;
5 run;

_N_表示当前数据指针指向的行。output指定输出的数据集。另外注意,SAS中的if语句不带end。

转载于:https://www.cnblogs.com/dennis-liucd/p/6853154.html

SAS编程基础 - 数据获取与数据集操作(1)相关推荐

  1. SAS编程基础 - 逻辑库和数据集

    1. SAS逻辑库 1.1 创建SAS逻辑库: libname lb 'F:\Data_Model'; libname是关键字,lb是创建的逻辑库的名称,引号内的内容是目录路径,最后一个分号结束程序语 ...

  2. SAS学习笔记之《SAS编程与数据挖掘商业案例》(2)数据获取与数据集操作

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(2)数据获取与数据集操作 1. SET/SET效率高,建立的主表和建表索引的查询表一般不排序, 2. BY语句,DATA步中,BY语句规定 ...

  3. 从程序员到数据科学家:SAS 编程基础 (06)- DATA步与PDV

    在BASE SAS 中,DATA 语句用于开始一个数据步, 后续为若干DATA步特定的语句:SAS数据步结束于下一个 DATA 步或 PROC 步开始之处,或者结束于后续显式指定的RUN语句. 注意: ...

  4. 信号量的实现和应用实验报告_Java高级编程基础:原子信号量操作实现组线程执行管理...

    前言 由于Java高级并发编程主要是针对多线程并发访问公共资源控制来展开的,而现在服务器大多都是多核处理,所以在执行控制中,单一的同步锁无法满足需要,为此Java 1.5开始引入了三个重要的概念Sem ...

  5. SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理...

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(3)变量操作.观测值操作.SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 ...

  6. SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(3)变量操作.观测值操作.SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 ...

  7. 操作系统内核Hack:(二)底层编程基础

    操作系统内核Hack:(二)底层编程基础 在<操作系统内核Hack:(一)实验环境搭建>中,我们看到了一个迷你操作系统引导程序.尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识 ...

  8. Linux编程基础:第5章Linux文件系统与操作 课后习题

    <Linux编程基础>黑马程序员/编著 清华大学出版社 目录 一.填空题 二.判断题 三.单选题 四.简答题 1.简单说明软链接文件和硬链接文件的区别. 2.已知inode结构体中的共有1 ...

  9. python编程大数据_Python编程基础 Python大数据数据分析高职 计算机 软件技

    内容介绍 本书采用以任务为导向的编写模式,全面地介绍了Python编程基础及其相关知识的应用,讲解了如何利用Python的知识解决部分实际问题.全书共7章,*1章介绍学习Python的准备工作,包括P ...

  10. SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制...

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...

最新文章

  1. TVM优化Deep Learning GPU算子
  2. 2015百度之星 列变位法解密
  3. matlab 绘图2
  4. DDD领域驱动设计---战略设计(包括四色原型建模)
  5. 易格斯拖链选型手册_拖链相关知识
  6. VS2015配置环境支持opencv3库(网络方法总结)
  7. Spark: history Server
  8. Linux内核源代码分析——可执行文件header处理(二进制文件读写范例,写DUL工具入门指引)...
  9. 深圳90后小伙拿到14所国外名牌大学offer
  10. python locust post 参数拼接md5_Locust性能测试--接口加密参数关联
  11. ICMAX解析无线路由器WAN口应该怎么设置
  12. Bagging你真的懂吗
  13. java实现网上招标系统
  14. [raspberry]树莓派无线鼠标延迟问题
  15. Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap
  16. DLL load failed while importing _ssl: 找不到指定的模块
  17. centos7 图形界面
  18. 【OpenBMC 系列】4.启动流程 使用qume模拟ast2600-evb
  19. 一顿操作猛如虎,一看结果还是0,Rust能避免Go的BUG?
  20. Unity接入激励视频广告,Admob+UnityAds+FacebookAudienceNetwork+Pangle。

热门文章

  1. vue 点击div 获取位置_Vue中div contenteditable 的光标定位方法
  2. 软件工程中逻辑覆盖的例题_干货丨一文读懂:飞算全自动软件工程平台如何提升软件开发效率...
  3. clion小白使用技巧(持续更新中)
  4. 关于python随机抽取各类型不重复值的思考(sample与randint的区别)
  5. C/C++[codeup 2018]数列
  6. 成功,动机与目标 读后感 -- 你苦于老大不小一事无成 我们成功的原因是什么
  7. 容器技术Docker K8s 22 容器服务ACK基础与进阶-存储管理
  8. 在UITextView显示HTML,以及NSAttributedString乱码问题解决 swift
  9. mysql让数据-1_mysql数据库基本操作1
  10. cmake和make区别