SAS对数据变量的处理

在使用DATA步基于已经存在的数据集生成新数据集时,可以指定在新数据集中不需要包含的变量而仅读取其他变量,或者指定仅需要在 新数据集中包含的变量。该功能可以通过DATA步中的SET语句和数据集选项KEEP=和DROP=来实现,也可以通过KEEP和DROP语句来实现。

1.使用数据集选项KEEP=和DROP=

使用数据集选项KEEP=和DROP=的基本形式如下:

DATA  新数据集;
SET  原数据集  (KEEP|DROP=变量列表);
RUN;

读取数据集sashelp.shoes中与产品销售相关的变量Product、Stores和Sales,建立新数据集。代码如下:

data  work.shoes_part1;
set  sashelp.shoes  (keep=Product  Stores  Sales);
run;
proc  print  data=work.shoes_part1  (obs=5)  noobs;
run;

在上面的代码中,SET语句使用数据集选项KEEP=指定的Product、 Stores和Sales。PROC PRINT打印所生成的数据集work.shoes_part1的前5 条观测,如下图所示。可以看到,该数据集中包含了变量Product、 Stores和Sales。

下面使用数据集选项DROP=来实现相同的功能,代码如下:

data  work.shoes_part2;
set  sashelp.shoes  (drop=Region  Subsidiary  Inventory  Returns);
run;

因为sashelp.shoes的变量包含Product、Stores、Sales、Region、Subsidiary、Inventory和Returns,所以当选项DROP=中指定了Region、 Subsidiary、Inventory和Returns时,剩下的变量Product、Stores和Sales都 会被读取并写入数据集work.shoes_part2。所生成的数据集 work.shoes_part2和前面示例中生成的work.shoes_part1相同。

简单来说,选择使用选项KEEP=还是DROP=依赖于哪种方法会需 要指定较少的变量。但相比较而言,使用选项KEEP=会明确指明需要读 取的变量,这样在比较大的作业中可以避免读取预期之外的变量。

2.使用KEEP和DROP语句

在DATA步中,KEEP和DROP语句同样可用于选取写入到新数据集 中的变量。使用DROP和KEEP语句的基本形式如下:

DATA  新数据集;
SET  原数据集;
KEEP|DROP变量列表;
RUN;

  在该过程中,DATA步会读取原数据集的所有变量,但在写入新数据集前只保留部分变量。新数据集中包含的变量由所使用的语句(KEEP语句或DROP语句)给出的变量列表确定。使用KEEP语句表示 只选取变量列表中变量,而使用DROP语句则表示选取除变量列表之外的其他所有变量。

读取数据集sashelp.shoes中跟产品销售相关的变量Product、Stores和Sales,建立新数据集。

下面两段代码分别使用KEEP语句和DROP语句来完成上述功能,生成数据集work.shoes_part3和work.shoes_part4。

代码1:

data  work.shoes_part3;
set  sashelp.shoes;
keep Product  Stores  Sales;
run;

代码2:

data  work.shoes_part4;
set  sashelp.shoes;
drop  Region  Subsidiary  Inventory  Returns;
run;

在代码1中,DATA步会读取数据集sashelp.shoes中的所有变量,并 选取KEEP语句指定的Product、Stores和Sales创建新数据集 work.shoes_part3。在代码2中,DATA步的DROP语句指定了Region、 Subsidiary、Inventory和Returns,那么剩下的变量Product、Stores、Sales 会被选取写入数据集work.shoes_part4。这里所生成的数据集 work.shoes_part3和work.shoes_part4也和work.shoes_part1相同。

使用KEEP语句还是DROP语句,与选择使用数据集选项KEEP=还是DROP=的标准一样。从上面的示例中可以看出,它们都可以实现相 同的功能。

开发程序时具体该怎样选择

(读取速度快、效率高、不能对未保留得字段进行处理):   1.使用数据集选项KEEP=和DROP=

(读取速度慢、效率差、可以多个数据集,可以对未保留得字段进行处理):2.使用KEEP和DROP语句

3.一个DATA步中创建多个数据集

数据集选项KEEP=和DROP=除了可以在SET语句中使用之外,还可以用于DATA语句中指定的数据集。这样就可以在一个DATA步中通过 给每个数据集使用选项KEEP=和DROP=来创建包含不同变量的多个数 据集。而KEEP和DROP语句却实现不了该功能,因为它们会影响所有的 输出数据集。

分别读取数据集sashelp.shoes中关于产品销售情况的变量

(Product、Stores及Sales)和产品库存情况的变量(Product、Inventory 及Returns),并将这两类变量写入两个数据集work.shoes_sales和 work.shoes_inventory。

代码如下:

data  work.shoes_sales  (keep=Product  Stores  Sales) work.shoes_inventory  (keep=Product  Inventory  Returns);
set  sashelp.shoes;
run;
proc  print  data=work.shoes_sales  (obs=5)  noobs;
title  "Product  Sales";
run;
proc  print  data=work.shoes_inventory  (obs=5)  noobs;
title  "Product  Inventory";
run;

两个PRINT过程打印的数据集work.shoes_sales和 work.shoes_inventory中的前5条数据分别如下图左和下图右所示。它们分别 包含变量Product、Stores、Sales和Product、Inventory、Returns。

4.有效地使用数据集选项KEEP=和DROP=

在DATA步中,可在DATA语句和SET语句中使用数据集选项 KEEP=和DROP=。在DATA语句使用这些选项,PDV中会包括输入数据 集中的所有变量,不过,只有当变量从PDV中写入结果数据集时,这些 选项才会产生影响。然而,在SET语句中使用这些选项时,这些选项会 确定哪些变量要从输入数据集中读取到PDV中,也就是说,SAS不会将 未包括的变量读入PDV。在数据集很大时,这种方式会使程序执行更有效率。

在上面代码的基础上可在SET语句中增加选项DROP=来控制变量Region和Subsidiary不被读入PDV,以提高程序执行效率。如下:

data  work.shoes_sales  (keep=Product  Stores  Sales) work.shoes_inventory  (keep=Product  Inventory  Returns);
set  sashelp.shoes  (drop=Region  Subsidiary);
run;

有时候,部分变量虽然不需要输出到新数据集,但在进行运算处理 时却需要用到,这时候这些变量必须被读入PDV中,那么此时就不适合 在SET语句中使用数据集选项KEEP=和DROP=了。对于这种情况,可在 DATA语句中使用数据集选项KEEP=、DROP=,或使用KEEP、DROP 语句来实现。

小结:

重点掌握关键字:set、keep、drop

1、set  表示需要建立数据集的初始数据集

2、keep、drop表示需要保留以及删除的字段名;可以用于data 后面的数据集的命名,set初始化数据集;以及data步单独使用。

转载于:https://www.cnblogs.com/suolilian/p/10490187.html

SAS对数据变量的处理相关推荐

  1. SAS 对数据的拼接与串接

    SAS 对数据的拼接与串接 使用SAS对数据进行串接.合并.更新与修改. 1. 数据集的纵向串接 数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成 一个新的数据集. 对数据集的纵向串接可以通 ...

  2. #SAS学习-数据加工处理-中

    上篇文章讲了一部分SAS处理数据的函数,由于函数实在太多,所以我就大概计划分3篇文章进行叙述,现在这个是第2篇~这篇主要集中在过程步的函数讲解~ 1)SAS过程步常用语句 大部分过程步都有一个必须的语 ...

  3. R语言使用haven包的read_spss函数读取spss格式数据、使用haven包的read_sas函数读取SAS格式数据、使用haven包的read_dta函数读取Stata格式数据

    R语言使用haven包的read_spss函数读取spss格式数据.使用haven包的read_sas函数读取SAS格式数据.使用haven包的read_dta函数读取Stata格式数据 目录

  4. R语言使用vtreat包的designTreatmentsC函数构建数据预处理计划、vetreat包的score frame(新生成数据变量的指南)、以及score frame字段说明

    R语言使用vtreat包的designTreatmentsC函数构建数据预处理计划.vetreat包的score frame(新生成数据变量的指南).以及score frame字段说明 目录

  5. 标签条码打印软件如何创建连续数据变量

    作为专业条码标签设计软件,NiceLabel提供了不同的变量字段,方便用户使用这些字段处理文本,图片和条码对象.那么为了方便大家快速学会这些技巧,下面就给大家介绍使用NiceLabel创建连续数据变量 ...

  6. ev3编程变量模块_英文视频教学翻译-机器人ev3编程学习的第二十讲:举例讲解数据变量模块编...

    机器人ev3编程学习的第二十讲:举例讲解数据变量模块编- Rob Widger (为了容易理解,在原文的翻译时做了修改 by EV3-TOM) 这一节我给大家讲解使用变量模块的编程,这些我喜欢的例子也 ...

  7. C/C++中的指针*是靠近数据类型还是靠近数据变量书写?

    C/C++中的指针*是靠近数据类型还是靠近数据变量? 在C/C++中,指针尤为重要,但是在书写时,*是靠近数据类型还是靠近变量数写呢? int *p; int* pi; 其实两种书写形式并无本质不同, ...

  8. 建立student类,在此类中所有数据定义为私有数据变量。并建立一个student对象数组,用附件中的数据进行初始化。计算每个学生三门课程的总分和平均成绩(C++实验)

    一.实验目的: (1)掌握类的创建,成员数据和成员函数的构建. (2)掌握构造函数的重载. (3)掌握静态成员函数和静态成员函数的使用. 二.实验内容和要求: (1)按照附件"成绩表.txt ...

  9. R语言使用fix函数通过编辑器自定义修改数据变量的名称、例如、使用fix函数自定义修改dataframe数据列的名称

    R语言使用fix函数通过编辑器自定义修改数据变量的名称.例如.使用fix函数自定义修改dataframe数据列的名称 目录

最新文章

  1. 麻省理工学院的牛人解说数学体系,你到哪个层次了?
  2. (转载)为什么欧美拿金牌不感谢祖国
  3. python基础===将Flask用于实现Mock-server
  4. css3新特性总结(视觉表现方面)
  5. linux系统sql语句报错_在linux下写的mysql无法插入,sql语句在复制中变'脏'了.
  6. [MyBatisPlus]测试BaseMapper的功能测试自定义功能
  7. java爬虫获取div内容_Java爬虫-简单解析网页内容
  8. 【Python】元组和列表相关知识总结
  9. Origin绘制带误差棒的曲线(Error Band)
  10. oracle11g运行超慢,oracle11g安装后电脑启动很慢怎么解决
  11. 【数据库】NoSQL数据库简介
  12. Excel 填充间格空白单元格与最上临近非空单元格值相同
  13. 此数据库处于单用户模式,当前某个用户已与其连接。 ALTER DATABASE 语句失败。 (Microsoft SQL Server,错误: 5064)...
  14. ios 网速监控_iOS 监测网络状态
  15. 企业考勤,用开源协同办公OA系统来管理!
  16. js笔记--BOM编程
  17. folium基础内容介绍
  18. FastUnit超简单摘抄
  19. 小公司里面的 Python 后端,数据库(MySQL)到底要学习到什么程度?
  20. 羽化 matlab,MATLAB实现图像羽化处理(图像羽化处理)

热门文章

  1. HTML DOM console.table() 方法
  2. CSS之media query模板
  3. 20个常用的Python小技巧
  4. 2015 总结 2016 展望
  5. C语言学习笔记(1)--基本概念和函数用法
  6. 20180307:python接口测试时json的传参与解析区分
  7. iPhone X Web 设计
  8. ODP.net与Oracle连接
  9. JS~~~ 前端开发一些常用技巧 模块化结构 命名空间处理 奇技淫巧!!!!!!...
  10. 初识SolrJ开发, schema.xml的配置与服务初始化.