SAS宏功能
将一个变量,一段程序或者一个文本命名,供以后调用,是用于扩充和制做用户化SAS系统的工具;利用宏功能用户可以减少在完成一些共同任务时必须输入的文本量。当用户在某个SAS程序中使用宏功能时,这个宏功能产生所需要的SAS语句和命名,SAS系统的其余部份接受这些语句和命令。

  • 获取SAS的系统信息。SAS在启动时就创建了一些自动宏变量,用以存储当前SAS进程启动的日期,时间,版本号及其它信息,用户可以在任何情况下使用这些宏变量。
  • 有条件的执行数据步和过程步。例如每天提交一份生产情况的详细报告,每周五增加一份汇总报告。使用宏功能每天运行同一个程序就可以实现上述任务。
  • 开发交互式系统。使用SAS宏语言的%WINDOW语句及一些基本的编程语句可开发交互式用户界面。
  • 产生与数据无关的SAS程序,但可展示与数据相关的结果。宏功能可保持SAS程序的独立性和移植性。一段程序在多种情况下均可运行,得到期望的结果。
  • 在不同的SAS数据步和过程步之间传递数据。SAS宏变量可在SAS的任何地方被引用,具有全局性,所以成为不同过程间传递数据最方便的手段。
  • 重复执行SAS程序码。凡用到SAS宏语言的变量和语言成分,都以符号%或&开始。当SAS程序提交后,在编译阶段,系统对程序逐词扫描过程中,凡遇到%或&开始的词,就启动宏语言处理器对此进行处理。

宏变量

宏变量属于SAS宏语言,但不同于DATA步变量。可以在SAS程序除数据行之外的任何地方定义并使用宏变量。一个DATA步变量仅与一个SAS数据集有联系,而宏变量不依赖于SAS数据集。宏变量与数据步中变量的主要区别是,数据步中变量的值往往与被处理观测有关,而宏变量有唯一确定的值,一个宏变量存放的值保持不变直到被修改。
宏变量具有唯一确定的值,可以存储字符串,是全局变量。可以在数据步中被引用,但不能在数据步中用赋值语句定义。引用时,在变量名前加“&”号,引用效果是变量值代替变量名。宏变量在引用时放在单引号之间不会被解读,只能在双引号之间。

SAS系统包含两种类型的宏变量:
- 自动宏变量,由SAS系统提供;
- 用户定义的宏变量,由用户在程序中定义。

自动宏变量
在SAS进程开始时,或程序运行过程中由系统自动创建,在SAS退出前一直保持有效,是全局宏变量,能在SAS任何地方被引用。以下是一些主要的自动宏变量:
SYSDATE SAS进程开始的日期;
SYSDATE9 以Date9.格式显示SAS进程开始的日期;
SYSTIME SAS进程开始的时间;
SYSSCP 使用的操作系统;
SYSDAY SAS进程开始是为星期几;
SYSVER SAS的版本;
SYSLAST 最新创建的SAS数据集的名字;

定义宏变量
有两种方式定义宏变量:%LET和call symput。定义宏变量并分配一个值给宏变量的最简单方法是使用宏程序语句%LET。格式如下:
%LET 变量名=变量值;
另一个语句就是call symput,其格式如下:
call symput(变量名,变量值);

%let print=%str(proc print;run;);data score;
input math@@;
cards;
71 81 91
;
run;
%let exa=score;
data temp;
set &exa;
if math>80;
run;
&print

宏变量的引用
为了引用一个宏变量的值,放一个&号在宏变量名字的前面
模式&name成为宏变量的引用。用户创建宏变量之后,可以在SAS程序中引用它。
%let exa=score;
title “display of student &exa”;
宏处理器用宏变量EXA的值替代&exa,SAS系统看到的是下面的TITLE语句:
title “display of student score”;
用户根据SAS程序中的需要可以多次引用宏变量。宏变量的值保持不变直到其被修改。
每次出现引用&exa,宏处理器用score替代它

在上例中,如果用户想要改变SAS数据集名字,可以在它出现的这段程序中通过改变宏变量的值来实现

%let exa=study.math;data temp;
set &exa;
if math>80;
run;proc print;
title "display of student  &exa";
run;

宏变量的特殊用法

  • %STR 将一段程序赋给一个宏变量. %STR(SAS程序)

%let print = %str(proc print seashell.class;run;);

若赋值给宏变量的值浮肿含有引号,要加百分号处理
例如:

%let text = Paul%’s Report;

  • %eval(表达式)
    在 计算表达式的值,再将结果赋给宏变量
%let m=2;
%let value = %eval(&m+8);
% put &value
  • %sysfunc 使用数据步函数(例如 substr\scan\trim\leet)
    %sysfunc(数据步函数名(自变量),<输出格式>)
%let curdate=%sysfunc(today(),word date.)
%let fmt2=%sysfunc(time(),time5.)


宏是一个被存贮的文本,用一个名字识别它。最简单的宏就像一个宏变量一样工作,但复杂的宏可以完成许多宏变量不能做的事。定义宏的语句格式为:
%MACRO 宏名称;
宏文本
%MEND <宏名称>;(默认存放在work.sasmacr中);
%MACRO语句是每一个宏的开始,同时必须给出这个宏的名字。宏名字的命名准则与SAS名字一样。宏的文本也就是宏的内容,宏内的字符串称为固定文本或模型文本,该文本将变为用户SAS程序的一部分。%MEND语句必须围住每个宏并表示宏的介绍。%MEND语句也可以放上宏名字来说明该宏已结束。

宏的调用
为了调用一个宏,放一个百分数符号(%)在宏名字前面就可以了,比如:%study
模式“%宏名称”称为宏的调用。当用户定义一个宏之后,可以在SAS程序中调用它,如:
Title “Display of school %study”;
宏处理器执行宏STUDY,把宏里面的固定文本替代到TITLE语句中。TITLE语句变为:
Title “Display of school Student score”;

data sashelp.class;
input a b;
cards;
31 76
76 92
62 37
;
run;

%macro printClass(class);proc print data=&class;run;
%mend printClass;

%printClass(sashelp.class)

SAS程序可以包括任意多个宏,且在一个程序中可以多次调用一个宏。对于简单文本的阐明,使用宏变量比定义一个宏更有效。然而,当任务比较复杂时,宏比宏变量更有优势。
把宏变量和宏结合在一起,将给出一种用宏工具编程的强有力的方法。下面我们将介绍在宏中使用宏变量的多种方法

data score;
input math phy Eng;
cards;
87 67 87
78 96 84
95 69 65
;
run;

%macro data;
data temp;
set score;
run;
%mend data;

%macro plot;proc plot;plot &math*&phy;run;
%mend plot;

%macro link(math,phy);
      %data
      %plot
%mend link;
%let exa=score;
%let xvar=math;
%let yvar=phys;
%let plot=%str(proc plot;plot &xvar*&yvar;run;);data score;
input math phys@@;
cards;
91 81
98 65
70 92
;
run;data temp;
set &exa;
run;&plot

宏参数
可以定义宏变量作为%macro语句的一部分,如:
%macro printClass(class);
proc print data=&class;
run;
%mend printClass;
被定义在一个%macro语句括号内的宏变量称为宏参数。当调用这个宏时只要给出这些参数的值, %printClass(sashelp.class)
宏处理器把第一个值给第一个宏变量名字,第二个值给第二个宏变量名字,以此类推(因此这些参数也称为位置参数)。以上这个宏执行后生成下面语句:
proc print data=sashelp.class; run;

对参数分配的值只在这个宏执行过程中有效。因此第二次调用宏时,还是要给出参数的值。宏参数是局部宏变量的一个例子。而宏变量是从用户创建它们直到SAS作业或SAS会话结束都存在;故前面介绍的宏变量为全局宏变量。
使用参数有以下几个优点:
用户可以少写几个%LET语句;
调用宏时不需要知道这些参数的名字,只需要提供这些值的类型;
使用参数可以保证该变量在宏之外的程序部份不会被引用。


宏的条件结构

%if 条件 %then 语句;

%if 条件 %then %do;语句组;
    %end;
    %else %do;语句组;
    %end;

例如:

%macro link(judge, math,phy);title;
    %if judge=yes %then %do;
    %data;title 'data for plot';
    %end;
       %plot;
%mend link;

宏的循环结构

宏的循环语句有三种类型,分别是
宏中DO循环语句的格式为:

%do 指标变量=始点 %to 终点(BY 增量);
文本或宏程序语句;
%end;

%do %while(表达式); /先判断再执行/
文本;
%end;

%do %until(表达式); /先执行再判断/
文本;
%end;

%macro create (name, number);
%do n=1 %to &number;&name.n
%end;
%mend create;
data %create(abc,3);
input a@@;
if a=1 then output abc1;
else if a=2 then output abc2;
else if a=3 then output abc3;
cards;
1 2 3
;
proc print data=abc1;
run;
proc print data=abc2;
run;
proc print data=abc3;
run;

SAS入门 (二)--宏相关推荐

  1. SQL基础使用入门(二): DML语句和DCL语句

    SQL语句第二个类别--DML 语句 DML是数据操作语言的缩写,主要用来对数据表中数据记录实例对象进行操作,包括插入.删除.查找以及修改四大操作,这也是开发人员使用中最为频繁的操作. 1.插入记录 ...

  2. 文本分类入门(二)文本分类的方法

    文本分类入门(二)文本分类的方法 文本分类问题与其它分类问题没有本质上的区别,其方法可以归结为根据待分类数据的某些特征来进行匹配,当然完全的匹配是不太可能的,因此必须(根据某种评价标准)选择最优的匹配 ...

  3. 转 Python爬虫入门二之爬虫基础了解

    静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...

  4. java类作用域标识符_java入门 (二) 标识符、数据类型、类型转换、变量、常量、作用域...

    java入门(二) 标识符 数据类型 类型转换 变量.常量.作用域 本次笔记引用B站:狂神说,虽然早就会了,现在回头来敲下基础,加深印象 1.标识符: java所有的组成部分都需要名字.类名丶变量名丶 ...

  5. MySQL入门 (二) : SELECT 基础查询

    1 查询资料前的基本概念 1.1 表格.纪录与栏位 表格是资料库储存资料的基本元件,它是由一些栏位组合而成的,储存在表格中的每一笔纪录就拥有这些栏位的资料. 以储存城市资料的表格「city」来说,设计 ...

  6. 微信小程序入门二:底部导航tabBar

    小程序底部导航栏组件tabBar,可以参考下官方的API:tabBar 先看代码 //app.json {"pages":["pages/index/index" ...

  7. conan入门(二):conan 服务配置-密码管理及策略

    conan 服务配置 密码管理及策略配置 第一次以管理员身份(admin)使用默认密码(password)WEB登录入JFrog Artifactory后台时,系统就提示要求我修改密码,因为现有密码太 ...

  8. CSS入门二、美化页面元素

    零.文章目录 CSS入门二.美化页面元素 1.字体属性 CSS Fonts (字体)属性用于定义字体系列.大小.粗细.和文字样式(如斜体) (1)字体系列font-family font-family ...

  9. SAS(二)SAS基本数据类型及SAS基本模块的介绍

    SAS(二)SAS基本数据类型及SAS基本模块的介绍 SAS基本介绍 SAS 是英文Statistical Analysis System的缩写,翻译成汉语是统计分析系统,最初由美国北卡罗来纳州立大学 ...

  10. Pascal游戏开发入门(二):渲染图片

    Pascal游戏开发入门(二):渲染图片 渲染静态图片 新增一个Texture,然后Render出来 创建Texture,并获取尺寸 procedure TGame.Init(title: strin ...

最新文章

  1. 连载MariaDB Crash Cource中文笔记(第二)
  2. 字符串根据字典值排序问题
  3. linux环境变量设置注意事项
  4. J2EE搭建Dynamic web SpringMVC工程404错误分析(三)
  5. 新手学Python推荐的四本书籍+2个资源网站
  6. xtrabackup备份脚本
  7. 如何在PHP中使用cURL连接到Tor隐藏服务?
  8. 前端-JavaScript1-6——JavaScript之变量类型的转换
  9. tensorflow之ExponentialMovingAverage
  10. centos6 revive-adserver
  11. 电脑右下角自动弹出窗口(弹窗)
  12. mfc通过com控制AutoCAD导出jpg文件
  13. 监督管理计算机系统的安全保,网络信息安全知识:监督管理计算机信息系统安全保护工作应由()完成。...
  14. DP入门系列-DP入门指导
  15. 20行Python代码爬取LOL全英雄皮肤图片
  16. 【天怒人怨爸爸系列】一年级数学口算题生成程序
  17. 算法实践——数独的基本解法
  18. 键盘常用键的asii值
  19. 密码学系列 - 椭圆曲线签名的基本原理
  20. python显示磁共振图像(MRI)(pydicom)

热门文章

  1. C11 标准下的 C 语言编程
  2. php pdf 生成分页,关于XSL生成PDF分页的问题
  3. MES系统之生产管理系统功能介绍(源码)
  4. 优先级表和Ascll表
  5. Linux下修改键盘映射
  6. tomcat优化笔记
  7. 高斯克吕格投影分带计算
  8. iOS 手势操作和事件传递响应链
  9. Unity的渲染管线
  10. Java 计算两点坐标距离