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=5;
else  c=12;

也可在赋值语句表达式中使用比较,例如:

c=5*(x<y)+12*(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中的级联符号取决于当前操作环境。

原文地址:https://www.cnblogs.com/suolilian/p/10523008.html

时间: 2024-10-10 23:47:20

SAS 操作数据集的观测的相关文章

SAS:提取数据集观测,宏参数

方法一: DATA _NULL_; SET A NOBS=NOBS; CALL SYMPUTX('NUM1',NOBS); STOP; RUN; &NUM1.就是观测数,局部宏参数,供调用 方法二: PROC SQL; SELECT COUNT(*) INTO: NUM2 FROM A; QUIT; &NUM2.:就是观测数,局部宏参数,供调用 一般情况下,两种方法都可以,但是当数据集的观测为零时,方法一就行不通了:

sas中的sql(5) 纵向操作数据集 Except、Intersect、Union、OuterJoin

SQL进行纵向操作的基本语法 proc sql; select * from table1 set-operator <all> <corr> select * from table2 set-operator <all> <corr> select * from table3; 1:几种set操作符 Except.Intersect.Union.OuterJoin Except.Intersect.Union三种set符号是默认进行unique处理,当进行

SAS 对数据集所有字段rename

    %macro rnm(data=,out=); proc contents data=&data out=t1(keep=varnum name) noprint; run; proc sql noprint; select name into :classname separated by' ' from t1 order by varnum; quit; %put &classname; data &out; set &data; %let i=1; %do %

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

import os import numpy as np import pandas as pd from datetime import datetime import matplotlib import matplotlib.pyplot as plt import seaborn as sns sns.set_style('white') %matplotlib inline %load_ext autoreload %autoreload 2 def to_utms(ut): retur

sas教程

http://web5.pku.edu.cn/pucssr/SASbiancheng.pdf 本教程中的主题将向您介绍 SAS Enterprise Guide.您最好依次浏览这些主题. 概述 启动项目并浏览主要窗口 向项目添加 SAS 数据 从文本文件导入数据 关于 SAS 任务 创建和修改列表报表 创建条形图 关于"查询生成器" 使用查询连接表 将计算列添加至查询 从查询生成"汇总表" 创建饼图 执行线性模型分析 将多个报表组合成单个文档 使用过程流 更多内容

sas数据导入终极汇总-之一

将数据文件读入SAS --DATA Step / PROC IMPORT 1.将SAS文件读入SAS-- data sasuser.saslin; set "F:\sas1.sas7bdat"; run; proc contents data=sasuser.saslin; run; 2.将其他形式文件导入成SAS --PROC IMPORT / 直接读入其他形式文件 proc import datafile = "c:\data\hsb2.sav" out= wo

《SAS编程与数据挖掘商业案例》学习笔记之十七

继续读书笔记,本次重点sas sql语句,由于sql内容多且复杂,本文只介绍商业应用中常用的并且容易出错的地方,内容包括:单表操作.多表关联.子查询以及merge和join的区别 1.单表操作 eg1: Proc sql outobs=10: *可选项,功能类似于data步中的obs数据集选项 create table class as Select  name, case when sex eq 'M' then "1" when sex eq 'F'  then "2&q

SAS 对数据的拼接与串接

SAS 对数据的拼接与串接 使用SAS对数据进行串接.合并.更新与修改. 1. 数据集的纵向串接 数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成 一个新的数据集. 对数据集的纵向串接可以通过以下两种方法实现: ·使用SAS DATA步的SET语句. ·使用SAS过程步的APPEND过程. 1.1 使用SET语句实现纵向串接 1.基本形式 使用SET语句实现纵向串接的基本形式如下: DATA 新数据集; SET 数据集1 数据集2 <数据集3 数据集4 ->; RUN; 其中: ·S

第一章 SAS软件入门

目录 第一章 SAS软件入门 1.1 语言特点 1.2 数据集 1.3 DATA步和PROC步 1.4 DATA步的内置循环 1.5 SAS窗口环境 1.6 阅读SAS日志 1.7 逻辑库 1.8 VIEWTABLE窗口 1.9 数据集属性 1.10 系统选项 第一章 SAS软件入门 1.1 语言特点 SAS程序 SAS程序就是一系列「有序 」的SAS语句,编程过程中需要遵循一些规则: 后续语句都围绕第一句展开 每一条SAS语句都以分号结尾 SAS程序布局 SAS是一种非常灵活的语言,甚至可以说