SAS 操作数据集的观测
SAS 操作数据集的观测
1. SAS表达式
表达式是操作数和操作符的序列,该序列会形成一组可执行并产生 结果值的指令。其中,操作数可以是常量、变量或表达式;操作符是表 示比较、数学计算或逻辑运算的符号,也可以是SAS函数或者括号组。 在SAS程序语句中,创建变量、赋值、求新值、转换变量和执行条件处理都会用到表达式。
1.操作数
操作数可以是常量、变量或表达式。SAS常量是表示一个固定值的 数字或字符串。常量可用作许多SAS语句的表达式,包括变量赋值语句 和IF-THEN语句,还可作为特定选项的值,例如OBS=5。SAS中存在4 类常量:字符常量、数字常量、时间日期常量和位测试常量。
(1)字符常量 字符常量由1到32767个字符组成,并且必须放在引号(单引号或双引号)中。在下面的SAS语句中,Tom是一个字符常量。
if name='Tom' then do;
如果字符常量包括单引号,则将该常量放入双引号中。例如,为了指定字符值Tom's,使用下面的形式:
if name="Tom's" then do;
或者将字符串放入单引号,并且用两个连续的单引号表示撇号。 SAS将两个连续的引号作为一个引号。例如,要表示字符串Tom's,则 使用下面的形式:
if name='Tom''s' then do;
要表示Tom“s,可以使用以下形式:
if name="Tom""s" then do;
注意 使用引号一定要匹配,否则会致使SAS误读当前的错误语
(2)数字常量 数字常量指的是SAS语句中出现的数字值。
(3)时间日期常量 在SAS中还可以创建日期常量、时间常量、时间日期常量。这些常量的形式为包含在单引号或双引号中的指定日期或时间,并接着跟随一 个d(日期)、t(时间)或dt(日期时间)来说明值的类型。例 如,'1jan2013'd、'9:25't、'01may12:9:30:00'dt。
(4)变量 变量是一组描述给定特性的数据值,可用于表达式中。 如果在一个表达式中指定了变量,但是变量值不匹配需要的类型,例如,在需要数值变量的地方使用了字符变量,或者相反,在需要字符 变量的地方使用了数值变量,SAS则会尝试将该变量值转换成所期望的 类型。SAS会按照如下规则自动在字符变量和数值变量之间转换:
·如果使用要求数字操作数的操作符(例如加号+)时指定了字符变 量,SAS将字符变量值转换为数字。
·在使用比较操作符比较字符变量和数值变量时,SAS会将字符变量 值转换为数字。
·如果使用要求字符操作数的操作符(例如级联操作符)时指定使用了数值变量,SAS使用格式BEST12.将数值变量值转换为字符。
·如果在赋值语句的左侧使用了数值变量而右侧是字符变量,SAS会 将字符变量值转换为数字。反之,当左侧是字符变量而右侧是数值变量 时,SAS会使用格式BESTn.将数值变量值转换为字符。其中,n是左侧 变量的长度。
当执行自动转换时,SAS会在日志中打印提示信息,表明发生了转 换。如果将字符变量值转换成数字时产生了无效的数字值,那么表达式 的结果是缺失值,并且会在日志窗口打印错误消息,同时,会将自动变 量_ERROR_设置为1。
2. 操作符
操作符包含算术操作符、比较操作符、逻辑操作符等,分别用于算 术运算、比较表达式和对布尔值进行操作等。此外,它还提供了一些只 能用于WHERE语句或WHERE=选项的操作符。
(1)算术操作符
使用算术操作符的表达式其运算结果是数值。表给出了算术操作符的定义、示例及示例表达式的计算结果。
算术操作符号
(2)比较操作符
使用比较操作符的表达式其运算结果是真(1)或假(0)。
比较操作符
在对数字值进行比较时,SAS会基于值进行比较。缺失数字值小于 任何其他数字值。表达式为真时,表达式的结果是1或真(true);表达 式为假时,表达式的结果是0或假(false)。比较操作符常用于IF- THEN语句中,如以下例子:
if x<y then c=;
else c=;
也可在赋值语句表达式中使用比较,例如:
c=*(x<y)+*(x>=y);
这时,SAS先计算括号内表达式(x<y)和(x>=y)的值(为0或1),然后使用计算结果替代括号里的表达式。因此,假设x=6,y=8, 那么赋值语句c=5*(1)+12*(0)的结果是c=5。
字符操作数的比较也会产生数字值1(或真)或0(或假)。SAS会 从左至右逐个字符对字符操作数进行比较。空格和缺失值小于其他任何 可打印字符值。字符顺序依赖于计算机的排列顺序,此顺序通常指的是在ASCII或EBCDIC编码中的顺序。例如在EBCDIC和ASCII的排列顺序中,G大于A。因此,表达式'Gray'>'Adams'的值为1或真。
如果是不同长度的两个字符值进行比较,在比较之前,SAS会假设 已经用空格补充到了较短的字符操作数结尾处,使两个字符值有了相同 的长度。在比较中尾缀空格会忽略,所以'fox'等于'fox'。然而,在字符值开始处和中间的空格都会参与比较,所以,'fox'不等于'fox'。
还可以在比较操作符之后使用“:”来比较字符表达式的指定前缀。 SAS会在比较过程中截断较长的值使其与较短值的长度一致。在下面的 例子中,在等于符号后面的冒号修改器告诉SAS仅查看变量LastName的 第一个字符是否为S。
if lastname=:'S';
(3)逻辑(布尔)操作符 使用逻辑操作符的表达式其运算结果是布尔值,即为真(1)或假(0)。下表给出SAS的逻辑操作符、等效字符、示例及其说明。
逻辑操作符
(4)其他操作符 在SAS表达式中还可以使用一些其他操作符,例如级联操作、括号等
*级联符号取决于当前操作环境。 在表达式,特别是包含多个操作符的复合表达式中,经常会将一些子表达式放入括号()中,表示优先对括号中的表达式求值,同时也会提高表达式的易读性。级联操作符||会将操作符两侧的字符值进行级联。通常会使用赋值语句将级联操作的结果存储在结果变量中。如果事先没有通过LENGTH或ATTRIB语句指定该结果变量的长度,则其长度为在级联操作中每个变量或常量的长度总和。级联操作不会去除操作数的前导和尾缀空格。如果变量带尾缀空 格,在级联前使用TRIM函数可去除值中的尾缀空格。如果要去除操作 数的前导和尾缀空格,通常使用表达式TRIM(LEFT(char))。
(5)WHERE语句操作符
在WHERE语句或数据集选项WHERE=中使用的表达式称为WHERE表达式。在WHERE表达式中除了可以使用上述操作符之外,还 可以使用如下表的操作符。注意,这些操作符只能在WHERE表达式中使用。
(6)MIN、MAX操作符
MIN(><)和MAX(<>)操作符分别用于找到两个操作数中的最 小值和最大值。例如,如果A<B,那么A><B的返回值为A,A<>B的返 回值为B。如果比较中包含缺失值,SAS使用缺失值的排序顺序。
注意,在WHERE语句或WHERE从句中,<>操作符等同于NE。
3.复合表达式求值
仅包含一个操作符的表达式为简单表达式。为了表示复杂的逻辑或 操作,表达式中通常会包含多个操作符,这样的表达式称为复合表达 式。复合表达式中经常使用括号对操作数进行分组。当遇到复合表达式 时,SAS会遵循下述规则确定计算表达式各部分的顺序:
·如果复合表达式中有括号,SAS会先对在括号中的表达式求值,再 对括号外的表达式求值。
·下表中给出了不同组的优先级。SAS先对组Ⅰ中的表达式部分求 值,然后依次对组Ⅱ、组Ⅲ等组求值。
·下表也给出了同组内的求值顺序。对组Ⅰ中的操作符是从右到 左,而其他组的操作符都是从左到右。
复合表达式求值顺序
①NOT、NE、OR以及组IV中的级联符号取决于当前操作环境。
SAS 操作数据集的观测的更多相关文章
- sas 获取数据集观测数量
DATA _NULL_;SET SASHELP.CLASS NOBS=N;CALL SYMPUTX('N',N);STOP;RUN; %PUT N=&N.; 运行结果: 57 DATA _NU ...
- SAS︱操作语句(if、do、select、retain、array)、宏语言、统计量、运算符号
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SAS中的一些常见的符号.运算符是一种符号①比 ...
- SAS拆分数据集
2012年8月8日 主要是根据选取条件来进行拆分 1.根据行数来选: data test; set oldset; if _n_=10 then output; if id="001&quo ...
- 吴裕雄--天生自然 PYTHON语言数据分析:ESA的火星快车操作数据集分析
import os import numpy as np import pandas as pd from datetime import datetime import matplotlib imp ...
- SAS︱数据索引、数据集常用操作(set、where、merge、append)
代码部分大多来源于姚志勇老师的<SAS编程与数据挖掘商业案例>. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ ------------ ...
- SAS 选取部分观测
SAS 对部分观测得处理 在建立新数据集时,有以下两种方式可以从已经存在的数据集中选取观测到新数据集中. ·通过删除不满足条件的观测来保留想要的观测. ·仅接受满足条件的观测. 条件可以由IF语句. ...
- SAS进阶《深入解析SAS》之对多数据集的处理
SAS进阶<深入解析SAS>之对多数据集的处理 1. 数据集的纵向串接: 数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成一个新的数据集. 据集的横向合并: 数据集的横向合并,指 ...
- ThinkPHP 数据库操作(五) : 存储过程、数据集、分布式数据库
存储过程 5.0支持存储过程,如果我们定义了一个数据库存储过程 sp_query ,可以使用下面的方式调用: $result = Db::query('call sp_query(8)'); 返回的是 ...
- SAS 对数据的拼接与串接
SAS 对数据的拼接与串接 使用SAS对数据进行串接.合并.更新与修改. 1. 数据集的纵向串接 数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成 一个新的数据集. 对数据集的纵向串接可以通 ...
随机推荐
- 自然语言推断(NLI)、文本相似度相关开源项目推荐(Pytorch 实现)
Awesome-Repositories-for-NLI-and-Semantic-Similarity mainly record pytorch implementations for NLI a ...
- MySQL复制相关技术的简单总结
MySQL有很多种复制,至少从概念上来看,传统的主从复制,半同步复制,GTID复制,多线程复制,以及组复制(MGR).咋一看起来很多,各种各样的复制,其实从原理上看,各种复制的原理并无太大的异同.每一 ...
- CSS 布局术语
这一节的知识非常重要,它关系到能否做出漂亮的网站.下面的概念.术语需要好好理解. 构建块:CSS采用盒子模型来处理每个HTML元素.盒子可以是一个“块级”盒子,也可以是一个“内联”盒子. 包含元素:包 ...
- WEBLOGIC because another WebLogic Server instance is already using this directory
错误提示:because another WebLogic Server instance is already using this directory 原因:ldap目录数据库文件被锁定,可能是w ...
- 【笔记】Python基础七:正则表达式re模块
一,介绍 正则表达式(RE)是一种小型的,高度专业化的编程语言,在python中它内嵌在python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行. 字符匹配 ...
- 一起学libcef--搭建自己的libcef运行环境(Win32程序,错误C2220解决方案)
转自 http://blog.csdn.net/wangshubo1989/article/details/50180413 现在就来讲讲如何在自己的win32程序中搭建libcef运行环境. 首先就 ...
- 使用Fiddle抓取IOS手机
1.配置Fiddle (Tools->Options) 勾选后,按照提示下载安装一个认证 Fiddle默认8888端口 2.电脑开个热点,手机连上后,在该wifi的代理配置中,选择手动,服务器输 ...
- 2019-04-28——Django学习
1.Django: Python Web应用开发框架,Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后 ...
- atlium designer 我画的pcb板到出元件清单, 里面显示 Board Stack Report
1. 2.去掉选项即可 板的问题,在导出原件清单时,有一个模板选项,如果有,你就把他去掉,变成空白的,我的选上就是你的那种出错效果,去掉就好了.
- mybatis中foreach使用
mybatis中的<foreach collection="list" item="item" index="index" open= ...