打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SAS系列28:SAS宏语言(一)
导读

      前面我们介绍了应用SAS实现数据集的创建、数据整理和清洗、数据的统计描述和简单的统计推断方法。在写这一期文章之前一直在纠结,是否要把SAS宏语言放在这一期开始介绍?考虑到宏语言可以实现代码的重复利用、完成复杂的逻辑判断和条件控制等,使得程序具有极高的灵活性。最后还是决定在介绍高级统计方法之前,介绍SAS宏语言。

一、宏语言的概述





      SAS宏语言是一种文本语言,SAS编程的一个重要组成部分,SAS系统中起着非常重要的作用:扩展定制SAS操作,减少文本输入量,SAS编程更加灵活高效。SAS系统中,SAS宏功能是包括宏语言和宏处理器,宏语言是用户与宏处理器交流的句法语言,宏处理器可以将宏代码转换为SAS可运行的语句,即完成宏功能。SAS系统在编译程序时,通过“&”(宏变量标记)和“%”(宏))两种定义符触发宏处理器工作。SAS宏运行机制如图10-1

图10-1 SAS宏运行机制示意图

二、宏变量





      宏变量与SAS DATA步中的变量是不一样的,宏变量是属于SAS宏语言,宏变量具有以下特点:

    ★  宏变量名最多可以包含32个字符;必须由字母和下划线开始,且由字母、下划线以及数字组成;不能包含空格,区分大小写。

    ★  宏变量值是字符数据,宏变量值最大长度可达65534个字符;宏变量值若含有数学表达式,其表达式不会被计算;大小写不转换;宏变量值的头尾若有空格,在赋值时会被移除;宏变量值若包含引号,赋值时引号也会被储存。

    ★  宏变量可以替代一段SAS程序文本,文本可以是一个值、一段代码或者一个表达式。

宏变量可根据来源分为用户定义宏变量和自动宏变量。根据适用范围可分为局部宏变量和全局宏变量。宏处理器在搜索引用宏变量是时,先搜索局部宏变量,如果没有再搜索全局宏变量。

(一)自动宏变量

      SAS启动后,宏处理器就会产生自动宏变量。用户可以给具有读/写状态的自动宏变量赋值,不能给只读状态的宏变量赋值,表10-1列出了部分自动宏变量及其含义。

10-1  按类别划分的自动宏变量

(二)定义宏变量

       用户可以自己创建宏变量、改变宏变量的值和定义其作用范围,用户可以任意给宏变量命名,但是名称不能是宏功能的保留字,为了避免自定义的宏变量与自动宏变量混淆,也不要用AFDMSSQLSYS等前缀定作为名称。义宏变量的方法有3种:使用宏程序语句%LETDATA步中定义宏变量;SQL语言中定义宏变量。其中使用宏程序语句%let是最简单的方法,我们主要介绍%let宏语句,其语法如下:

        %LET 变量名=宏变量值

%LET NAME=XJF; /*宏变量名NAME,宏变量值XJF*/%LET NAME1='JINGDINGTONGJI';/*宏变量名NAME1,宏变量值'JINGDINGTONGJI'*/%LET X=12*2;/*宏变量名x,宏变量值12*2*/

(三)查看宏变量

       通常,在SAS程序调试过程中,用户可以通过%PUT语句来查看宏变量,%PUT语句的语法如下,:

   %PUT <TEST | _ALL_ |_AUTOMATIC_ | _GLOGBAL_ | _LOCAL_ | _USER_>

      %PUT语句中各选项说明详见表10-2。

表10-2 %PUT语句选项含义

%LET NAME=XJF;%PUT “I'm &NAME”;

(四)调用宏变量

       通常,用户定义宏变量后,用户可通过符号“&”来获取宏变量值,这个过程称之为调用宏变量,也称为宏变量的解析。宏变量的调用可分为直接调用、间接调用和隔离引用。

1. 直接调用宏变量

       直接调用宏变量的语法如下:

       &宏变量名;

%LET VAR=10 ;%LET NAME=XJF;DATA A; X=&VAR.; Y="&NAME.";RUN;

图10-2  直接调用宏变量创建数据集A结

%LET VAR=10 ;%LET NAME=XJF;DATA B; X=&VAR.; Y=&NAME.;RUN;

图10-32  直接调用宏变量创建数据集B结果

在调用宏变量时要注意,由于宏处理器只能在双引号中进行替代,因此在调用类似于宏变量“NAME”宏变量值时,必须用双引号括住该宏变量名,否则就会出错。从图10-2和图10-3的数据集可以看出,没用双引号的数据集(图10-3)包含了三个变量,其中变量Y和变量XJF是缺失值。

2. 间接调用宏变量

间接调用宏变量也是引用宏变量的一个非常有用的方式,间接调用宏变量是通过多个“&”符号来实现的。宏处理对多个“&”的处理规则是:从左至右进行扫描,如宏变量只有一个“&”,则解析该宏变量;如果多个,则将相邻的两个“&”替换成一个“&”,再继续扫描重复以上过程。

%LET NAME8=JINGDINGTONGJI;%LET VAR=8;%PUT &&NAME&VAR;

图10-4 间接调用宏变量日志窗口显示结果

3. 隔离调用宏变量

宏变量可以是任何一个文本,当宏变量需要会和其他文本结合在一起时,我们就要用点句号“.”把宏变量与其他文本分隔开来,即符号“&”与“.”之间的部分是需要解析的变量名。

%LET TEAM=JINGDINGTONGJI;%PUT &TEAM.888;%PUT &TEAM 888;%PUT &TEAM..TXT;

10-5 隔离调用宏变量日志窗口显示结

%LET D=DISEASES;DATA &D.1 &D.2 &D.3; SET SASHELP.BMT; IF GROUP="ALL" THEN OUTPUT &D.1; ELSE IF GROUP="AML-Low Risk" THEN OUTPUT &D.2; ELSE OUTPUT &D.3;RUN;

图9-97是两个变量的统计描述结果;图9-98是SPEARMAN相关分析结果:rs=0.90506,P<0.0001;图9-99是KENDALL相关分析结果:rk=0.73856,P<0.0001。SPEARMAN相关分析和KENDALL相关分析的结果都显示两个变量间存在直线相关。

10-6 隔离调用宏变量创建新数据集的日志窗口显示结

10-7 隔离调用宏变量创建新数据集

(五)删除宏变量

      用户定义的宏变量可以应用%SYMDEL语句删除,其语法如下:

      %SYMDEL 宏变量名1 宏变量名2 …;

      整理不易,欢迎点亮再看哦!

参考文献:

[1] 薛富波, 张文彤, 田晓燕, 等. SAS8.2统计应用教程[M]. 北京:兵器工业出版社, 2004

[2] 夏庄坤, 徐唯 , 潘红莲, 等. 深入解析SAS——数据处理、分析优化与商业应用[M]. 北京:机械工业出版社, 2014.

[3] 高惠璇. SAS系统Base SAS软件使用手册[M]. 北京:中国统计出版社, 1997.

[4] 姚志勇. SAS编程与数据挖掘商业安全[M]. 北京:机械工业出版社, 2010.

SAS系列推文
【赠人玫瑰,手留余香】

----------------------------------------------

SAS系列27:线性回归

SAS系列26:双变量数据假设检验

SAS系列25:双向有序列联表检验

SAS系列24:单向有序列联表资料的假设检验

SAS系列23:列联表资料假设检验方法

SAS系列22:定性数据假设检验

SAS系列21:SAS统计推断(六)

SAS系列20:SAS统计推断(五)

SAS系列19:SAS统计推断(四)

SAS系列18:SAS统计推断(三)

SAS系列17:SAS统计推断(二)

SAS系列16:SAS统计推断(一)

SAS系列15:SAS数据可视化结果输出

SAS系列14:SAS数据可视化(三)

SAS系列13:SAS数据可视化(二)

SAS系列12:SAS数据可视化(一)

SAS系列11:SAS基础统计过程(三)

SAS系列10:SAS基础统计过程(二)

SAS系列09:SAS 基础统计计算过程

SAS系列08:SAS函数

SAS系列07:SAS数据整理(三)

SAS系列06:SAS数据整理(二)

SAS系列05:SAS数据整理(一)

SAS系列04:SAS数据导入

SAS系列03:SAS入门(二)之SAS编程语言基础

SAS系列02:SAS入门(一)

SAS系列01:统计分析航空母舰-SAS简介

----------------------------------------------

精鼎特邀

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SAS宏
SAS信用评分九步曲之第一步数据清洗
if 和 for 声明变量的作用域
pearson, kendall 和spearman三种相关分析方法的区别
SAS学习笔记
SAS:SAS 常用过程之 统计描述过程proc univariate
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服