SAS Says基础篇:SAS宏初步(1)
宏以前被认为是经验老道的SAS程序员使用的高级技术。但现在新手也能够了解一些。幸运的是,宏的基本功能不是那么难理解。本章介绍的最普遍使用的SAS宏语言的特征。
宏处理器 标准SAS程序中,提交程序后,SAS就编译并立即执行。但宏语句多了一步,在提交之后,SAS会将宏语句传送到宏处理器上,将其转变为SAS标准代码,通常叫做“变换代码”(meta-programming.)
宏和宏变量 SAS宏代码包括两个基本部分:宏命令和宏变量。宏变量通常加一个“&”作为前缀,而宏命令通常加一个“%”作为前缀。
局部VS全局 宏变量有局部宏变量和全局宏变量。如果在宏的内部定义则为局部宏变量,只能在内部使用。如果在开放代码中定义则为全局宏变量。避免两种错误:在宏之外(开放代码)使用局部变量;创建同名的局部变量和全局变量。
启动宏处理器 使用宏指令之前必须将宏系统选项打开,尽管有时默认是打开的。可以用下面代码查看是否打开:
PROC OPTIONS OPTION=MACRO;
RUN;
查看日志,如果看到MACRO,则打开了;如果看到NOMACRO,则没有打开。
避免宏错误 宏会让人很头痛,可以通过分段形式避免。首先,用SAS标准语言写下程序;接着,将其转变为宏代码。
用%let创建一个宏变量 最简单给宏变量分配一个值的方法是%let,基本形式为:
%LET macro-variable-name=value;
宏变量名必须符合SAS命名法则,(少于等于32字节、以字母或下划线开头、只能包括字母、数字和下划线),下面创建了宏变量:
%LET iterations=10;
%LET country=New Zealand;
当赋值字符串时,不需要加引号。除非开头和结尾的空格,否则从等号到分号的全部内容都是变量值。
使用宏变量 宏变量前面要加前缀&,注意宏处理器找不到单引号内的宏变量,只能用双引号。如下的例子:
DO i=1 to &iterations;
TITLE ”Addresses in &country”;
经宏处理器编译后,语句变成:
DO i=1 to 10;
TITLE ”Addresses in New Zealand”;
例子 一份关于花店销售的数据,变量为顾客ID,销售日期,花的种类,数量:
想要一份反映某一种类型花的销售情况数据,宏变量就可以不用编辑数据步和过程步来选择一种花种:
结果如下:
宏可以使一段代码在一个或多个程序中被反复使用,而不需要重复的去编写相同或相似的代码。基本形式为:
%MACRO macro-name;
macro-text
%MEND macro-name;
%MACRO语句告诉SAS这是宏开始,而%MEND则意味着结束。macro-name是自己命名的,但mend后面的macro-name则是可选的,但加入会使得句子好很多(easier to debug and maintain)。
启动宏 定义了宏之后,可以通过在宏名称前面增加%来启动宏:%macro-name,注意这里可以不用分号。
例子 使用前面花店销售的数据:
下面的代码创建了一个名为%SAMPLE的宏,来将数据按照Quantity排序,打印出最大销售额的五个观测值。然后用标准数据步读取数据,并启动宏:
结果为:
这样的宏有些限制,因为它只能做一件事。现在结合%let语句,并增加参数使得其更加灵活
宏自动呼叫库 本书中的宏仅在一个程序内部定义和启动。也可以将宏储存在一个中心位置,叫做自动呼叫库,被各个程序分享。具体来说,将宏作为文件储存在某路径中,或作为分区数据集中的一员。使用MAUTOSOURCE和SASAUTOS=系统选项告诉SAS在哪里查找宏。之后,即使宏没有出现在程序中,也可以启动它了。
参数就是宏的变量,给宏增加参数,在%MACRO语句中的括号内列出宏变量的名字。基本形式为:
%MACRO macro-name(para-1=,para-2=,...para-n=);
macro-text
%MEND macro-name;
比如,一个叫做%QuarterlyRepott的宏可能这样开始:
%MACRO QuarterlyReport(quarter=,salesrep=);
这个宏有两个参数&QUARTER 和&SALESREP。启用这个宏可以用这样的语句:
%quarterlyreport(quarter=3,salesrep=Smith)
例子 仍然是花店销售例子:
现在需要一份报告,反映每位对每位顾客的销售。下面的代码定义了宏%SELECT,并启动两次。这个宏排序并打印数据FlowerSales,使用参数创造了两位命为&CUSTOMER和&SORTVAR的宏变量:
结果为:
在宏中使用条件逻辑的基本形式为:
%IF condition%THEN action;
%ELSE%IF condition%THEN action;
%ELSE action;
%IF condition%THEN%DO;
SAS statements
%END;
自动宏变量 每一次启动SAS,宏处理器自动创建一些宏变量,可以使用在程序中。最常见的有:
比如,可以像这样结合自动宏变量和条件逻辑语句:
%IF &SYSDAY=Tuesday %THEN %LETcountry=Belgium;
%ELSE %LET country=France;
例子 仍然是花店销售数据:
现在想在周一和周四的时候打印报告,代码如下:
当程序提交之后,宏处理器将会写下如下代码:
如果这段代码是周四写的,那么结果如下:
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA持证人简介: 居瑜 ,CDA一级持证人国企财务经理,13年财务管理运营经验,在数据分析就业和实践经验方面有着丰富的积累和经 ...
2025-04-25在当今数字化时代,数据分析师的重要性与日俱增。但许多人在踏上这条职业道路时,往往充满疑惑: 如何成为一名数据分析师?成为 ...
2025-04-24以下的文章内容来源于刘静老师的专栏,如果您想阅读专栏《刘静:10大业务分析模型突破业务瓶颈》,点击下方链接 https://edu.cda ...
2025-04-23大咖简介: 刘凯,CDA大咖汇特邀讲师,DAMA中国分会理事,香港金管局特聘数据管理专家,拥有丰富的行业经验。本文将从数据要素 ...
2025-04-22CDA持证人简介 刘伟,美国 NAU 大学计算机信息技术硕士, CDA数据分析师三级持证人,现任职于江苏宝应农商银行数据治理岗。 学 ...
2025-04-21持证人简介:贺渲雯 ,CDA 数据分析师一级持证人,互联网行业数据分析师 今天我将为大家带来一个关于用户私域用户质量数据分析 ...
2025-04-18一、CDA持证人介绍 在数字化浪潮席卷商业领域的当下,数据分析已成为企业发展的关键驱动力。为助力大家深入了解数据分析在电商行 ...
2025-04-17CDA持证人简介:居瑜 ,CDA一级持证人,国企财务经理,13年财务管理运营经验,在数据分析实践方面积累了丰富的行业经验。 一、 ...
2025-04-16持证人简介: CDA持证人刘凌峰,CDA L1持证人,微软认证讲师(MCT)金山办公最有价值专家(KVP),工信部高级项目管理师,拥有 ...
2025-04-15持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。在实际生活中,我们可能会 ...
2025-04-14在 Python 编程学习与实践中,Anaconda 是一款极为重要的工具。它作为一个开源的 Python 发行版本,集成了众多常用的科学计算库 ...
2025-04-14随着大数据时代的深入发展,数据运营成为企业不可或缺的岗位之一。这个职位的核心是通过收集、整理和分析数据,帮助企业做出科 ...
2025-04-11持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。 本次分享我将以教培行业为 ...
2025-04-11近日《2025中国城市长租市场发展蓝皮书》(下称《蓝皮书》)正式发布。《蓝皮书》指出,当前我国城市住房正经历从“增量扩张”向 ...
2025-04-10在数字化时代的浪潮中,数据已经成为企业决策和运营的核心。每一位客户,每一次交易,都承载着丰富的信息和价值。 如何在海量客 ...
2025-04-09数据是数字化的基础。随着工业4.0的推进,企业生产运作过程中的在线数据变得更加丰富;而互联网、新零售等C端应用的丰富多彩,产 ...
2025-04-094月7日,美国关税政策对全球金融市场的冲击仍在肆虐,周一亚市早盘,美股股指、原油期货、加密货币、贵金属等资产齐齐重挫,市场 ...
2025-04-08背景 3月26日,科技圈迎来一则重磅消息,苹果公司宣布向浙江大学捐赠 3000 万元人民币,用于支持编程教育。 这一举措并非偶然, ...
2025-04-07在当今数据驱动的时代,数据分析能力备受青睐,数据分析能力频繁出现在岗位需求的描述中,不分岗位的任职要求中,会特意标出“熟 ...
2025-04-03在当今数字化时代,数据分析师的重要性与日俱增。但许多人在踏上这条职业道路时,往往充满疑惑: 如何成为一名数据分析师?成为 ...
2025-04-02