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 操作数据集的观测的更多相关文章

  1. sas 获取数据集观测数量

    DATA _NULL_;SET SASHELP.CLASS NOBS=N;CALL SYMPUTX('N',N);STOP;RUN; %PUT N=&N.; 运行结果: 57 DATA _NU ...

  2. SAS︱操作语句(if、do、select、retain、array)、宏语言、统计量、运算符号

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SAS中的一些常见的符号.运算符是一种符号①比 ...

  3. SAS拆分数据集

    2012年8月8日 主要是根据选取条件来进行拆分 1.根据行数来选: data test; set oldset; if _n_=10 then output; if id="001&quo ...

  4. 吴裕雄--天生自然 PYTHON语言数据分析:ESA的火星快车操作数据集分析

    import os import numpy as np import pandas as pd from datetime import datetime import matplotlib imp ...

  5. SAS︱数据索引、数据集常用操作(set、where、merge、append)

    代码部分大多来源于姚志勇老师的<SAS编程与数据挖掘商业案例>. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ ------------ ...

  6. SAS 选取部分观测

    SAS  对部分观测得处理 在建立新数据集时,有以下两种方式可以从已经存在的数据集中选取观测到新数据集中. ·通过删除不满足条件的观测来保留想要的观测. ·仅接受满足条件的观测. 条件可以由IF语句. ...

  7. SAS进阶《深入解析SAS》之对多数据集的处理

    SAS进阶<深入解析SAS>之对多数据集的处理 1. 数据集的纵向串接: 数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成一个新的数据集. 据集的横向合并: 数据集的横向合并,指 ...

  8. ThinkPHP 数据库操作(五) : 存储过程、数据集、分布式数据库

    存储过程 5.0支持存储过程,如果我们定义了一个数据库存储过程 sp_query ,可以使用下面的方式调用: $result = Db::query('call sp_query(8)'); 返回的是 ...

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

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

随机推荐

  1. activiti-6.0工作流应用模板

     acriviti6.0官方操作指南:https://www.activiti.org/userguide/#demo.setup.one.minute.version 下载 acriviti6.0压 ...

  2. SnowFlake学习

    分布式系统中生成全局唯一且趋势递增ID UUID - 太长,无序,数据库插入分裂性能不行 利用数据库自增序列,等步长生成 - 依赖数据库 SnowFlake:使用见下图 抄代码 https://www ...

  3. Django应用app创建及ORM

    一.重要知识点回顾: 1. form表单提交数据的注意事项: 1. 是form不是from,必须要有method和action (action用来指定你的数据提交到后台哪个地方,method用来指定你 ...

  4. 使用TensorFlow训练模型的基本流程【转】

    原文地址(https://github.com/wmpscc/TensorflowBaseDemo ) 本篇文章将介绍使用tensorflow的训练模型的基本流程,包括制作读取TFRecord,训练和 ...

  5. docker 相关

    https://www.cnblogs.com/neptunemoon/p/6512121.html centos7 安装docker1.更新yum包yum update2.卸载旧版本(如果安装过旧版 ...

  6. Going to university is supposed to be a mind-broadening experience.

    Going to university is supposed to be a mind-broadening experience. That assertion is presumably mad ...

  7. python之列表及其方法---整理集

    列表类,类名是list 通过list类创建对象,使用中括号 列表特性: 使用中括号括起来 中间用逗号分隔每个元素 元素可以是数字.字符串.布尔值.列表 列表中可以嵌套列表 列表中每个元素的下标从0开始 ...

  8. RFID概述

    自动识别技术的本质在于利用被识别物理对象的一些具有辨识度的特征来对物理对象进行区分和识别.因此,这些具有辨识度的特征可以是物理对象自带的特征,如指纹,人脸,语言,视网膜,心跳等,也可以是通过第三方赋予 ...

  9. 写给自己的小CASE

    一时的完美不代表什么,重要的是不断地学习和成长:直面挑战,不断进取.   摘自<看见成长的自己>.

  10. 思科模拟器GNS3-2.1.8安装笔记 (适用于版本2.0.3以上的GNS3)

    当前现阶段学习经常使用的路由交换设备主要来自于思科.华为和华三三家,这三家的设备操作配置大致类似,却又不尽相同.因为实体设备通常都非常昂贵,所以作为学习,我们通常会使用它们提供的模拟器.华为的模拟器是 ...