SAS 分组与排序
SAS 分组与排序
SAS对数据集进行操作时,经常需要在SET、MERGE、MODIFY或 UPDATE语句中使用分组数据。使用分组数据最基本的方法是使用BY 语句,其基本形式如下:
BY 变量列表;
BY语句除了可用于DATA步中对数据集进行操作外,也可以用于 SAS PROC步。在这些地方使用分组数据时,要求所有的观测必须按BY 语句中的变量以数字或字符顺序升序或降序排列,或者以某种方式分 组,例如以日历的月份或格式化后的值为条件进行分组。如果数据不满 足这个条件,可使用SORT过程对其进行排序分组。
1.使用SORT过程对观测进行排序
使用SORT过程的基本形式如下:
PROC SORT DATA=输入数据集 <OUT=输出数据集> <其他选项>;
BY 变量列表;
RUN;
- ·输入数据集指定需要排序的数据集。
- ·变量列表指定排序变量,可以是一个变量或多个变量。当指定多个变量时,SAS首先会按照第一个变量分组,然后在同一个分组内依照 变量列表中的其他变量逐个进行排序。
- ·选项OUT=指定存储排序后数据的新数据集。当该选项不存在时, 排序生成的数据写入由选项DATA=指定的数据集。输出数据集可以和 输入数据集相同,不过此时会覆盖输入数据集。当输出数据集与输入数 据集不同时,会创建新数据集。
- ·还可以指定其他选项。
- 默认情况下,SAS根据BY变量的值升序排列分组。
对公司员工先按照部门(Dept)名称进行排序,在同一部门里按照入职日期(Entry_Date)进行排序。
公司员工所在数据集saslib.employee的部分数据如图3.13所示。该数据集包含员工编号、姓名、所在部门、职位和入职年份。使用SORT过程对该数据集进行排序时,在BY语句中先后指定排序的变量Dept和Entry_Date。
proc sort data=saslib.employee out=saslib.employee_sorted;
by Dept Entry_Date;
run;
2.使用选项DESCENDING对观测按变量降序排序
在BY语句中,还可以在每个变量之前指定选项DESCENDING对变 量进行降序排序,或者根据需要对部分变量进行升序排序、部分变量降 序排序。其基本形式如下:
BY <DESCENDING > 变量1 << DESCENDING > 变量2...>;
如果变量前面存在选项DESCENDING,则该变量在组内按降序排序,否则按默认的升序排序。
将saslib.employee中的员工数据按部门名称进行排序(升序),每个部门内部的入职日期由近到远进行排序(降序)。代码 如下:
proc sort data=saslib.employee out=saslib.employee_descending;
by Dept descending Entry_Date;
run;
3.找到分组中的第一个和最后一个观测
在使用BY语句时,SAS会自动为BY语句中指定的每个变量生成两个临时变量:FIRST.BY变量和LAST.BY变量。当变量值在每个分组中第一次出现时,FIRST.BY变量为1,否则为0;当变量值在每个分组中 最后一次出现时,LAST.BY变量为1,否则为0。通过这两个变量可以找到分组中的第一个和最后一个观测,并进行相应的处理。在DATA步中 使用SET语句和BY语句的基本形式如下:
DATA 数据集;
SET 数据集;
BY 变量列表;
...其他语句;
RUN;
取排序生成的saslib.employee_sorted中每个部门最先入职和最后入职的员工,生成新数据集saslib.employee_fl。
代码如下:
data work.employee_fl;
set saslib.employee_sorted;
by Dept;
if first.Dept or last.dept;
run;
proc print data=work.employee_fl noobs;
run;
4.使用选项NODUPKEY删除重复BY变量的观测
使用SORT过程的NODUPKEY可以在对数据集按BY变量进行排序 的同时,删除数据集中BY变量值相同的观测。
proc sort data=saslib.contact2_raw out=saslib.contact2 dupout=work.contact2_dup nodupkey;
by Name;
run;
proc print data=saslib.contact2 noobs;
title "Observations with Duplicate BY Values Deleted";
run;
proc print data=work.contact2_dup noobs;
title "Duplicate Observations";
run;
在SAS 分组与排序过程中,需要掌握得关键词为:
proc sort data=work.dataone out=datause uniqueout=uniquedata;
by var1 descend var2;
first.var1 or last.var1;
SAS 分组与排序的更多相关文章
- Linq入门演练---(1)基本用法-分组,排序,内连接
这一节大家共同学习下LINQ的基本用法,主要包括LINQ的分组,排序,和内外连接. 1.分组 基本语法: group element by key element 表示查询结果返回的元素,key表示 ...
- mysql 分组内 排序
mysql 分组内 排序 类似于 sqlserver over partition by 因为mysql中木有sqlserver over partition by这个函数,要从sqlserver ...
- ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
转载:https://www.cnblogs.com/alsf/p/6344197.html 1.row_number() over()排序功能: (1) row_number() over()分组排 ...
- WPF DataGrid分组和排序
之前一直用的Dev的GridControl,控件自带分组排序啥的.今天试了下在wpf自带的Datagrid控件上实现分组和排序. Datagrid上实现这些功能主要用到CollectionViewSo ...
- mongo 过滤查询条件后分组、排序
描述:最近业主有这么一个需求,根据集合中 时间段进行过滤,过滤的时间时间段为日期类型字符串,需要根据某一日期进行截取后.进行分组,排序 概述题目:根据createTime时间段做查询,然后以 天进行分 ...
- 使用dataframe解决spark TopN问题:分组、排序、取TopN和join相关问题
package com.profile.mainimport org.apache.spark.sql.expressions.Windowimport org.apache.spark.sql.fu ...
- ROW_NUMBER() OVER()函数用法;(分组,排序),partition by (转)
1.row_number() over()排序功能: (1) row_number() over()分组排序功能: 在使用 row_number() over()函数时候,over()里头的分组以及排 ...
- java List分组和排序处理
在一些应用中,需要将List中的对象按某种情况分组或者排序处理.做个小结如下: 1. 如一个List中存放了ProductDoing对象,productDoing对象有rawTypeId 现在要求将r ...
- 排序(分组后排序&整排)
一.整排 要求:根据score进行排名,分数相同,名次相同,且连续 表如下图: sql语句: 方法一:select a.score, (select count(distinct b.score) f ...
随机推荐
- 阿里云从0安装mysql到远程连接
1.安装mysql数据库. (1)下载mysql源安装包:wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rp ...
- PHP通过身份证号码获取性别、出生日期、年龄等信息
$sex = substr($idcard, (strlen($idcard)==18 ? -2 : -1), 1) % 2 ? '1' : '2'; //18位身份证取性别,倒数第二位奇数是男,偶数 ...
- wireshark抓包新手使用教程
wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息.常用于开发测试过程各种问题定位. Wireshark软件安装 软件下载路径:wireshark官网.按照系 ...
- (译)MySQL的10个基本性能技巧
原文出处:https://www.infoworld.com/article/3210905/sql/10-essential-performance-tips-for-mysql.html MySQ ...
- Ubuntu上部署Jenkins
1.Ubuntu上安装jdk.tomcat https://blog.csdn.net/evankaka/article/details/50463782 2.Ubuntu上配置Jenkins htt ...
- 其它 搭建https服务器
原因是这样的,做了个淘宝的数据管理系统(仅供自己使用),然后需要淘宝卖家的生意参谋里面的一些数据,比如实时访客,里面有每个用户搜索什么关键字进来的,这些信息. 自己基于CefSharp开发了一个win ...
- easyui的datagrid某个字段return一个a链接
实现方法用 formatter formatter: function(value, row, index) { return '<a href="javascript:void(0) ...
- Arthas进阶学习(常用命令)
Step1 下载demo-arthas-spring-boot.jar,再用java -jar命令启动: wget https://github.com/hengyunabc/katacoda-sce ...
- HTML基本入门完成
四. (一)丶下拉框select元素:一般可以创建单选或多选菜单.<select>与<option>一般同时使用,select代表下拉框,option代表他的每一项. 1.基本 ...
- Python学习—数据库篇之pymysql
一.pymysql简介 对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql是Python中操作MySQL的模块,其使用方法和MySQ ...