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
“用户旅程分析”概念 用户旅程图又叫做用户体验地图,它是用于描述用户在与产品或服务互动的过程中所经历的各个阶段、触点和情 ...
2025-01-22在竞争激烈的商业世界中,竞品分析对于企业的发展至关重要。今天,我们就来详细聊聊数据分析师写竞品分析的那些事儿。 一、明确 ...
2025-01-22在数据分析领域,Excel作为一种普及率极高且功能强大的工具,无疑为无数专业人士提供了便捷的解决方案。尽管Excel自带了丰富的功 ...
2025-01-17在这个瞬息万变的时代,许多人都在寻找能让他们脱颖而出的职业。而数据分析师,作为大数据和人工智能时代的热门职业,自然吸引了 ...
2025-01-14Python作为一门功能强大的编程语言,已经成为数据分析和可视化领域的重要工具。无论你是数据分析的新手,还是经验丰富的专业人士 ...
2025-01-10完全靠数据决策,真的靠谱吗? 最近几年,“数据驱动”成了商界最火的关键词之一,但靠数据就能走天下?其实不然!那些真正成功 ...
2025-01-09SparkSQL 结构化数据处理流程及原理是什么?Spark SQL 可以使用现有的Hive元存储、SerDes 和 UDF。它可以使用 JDBC/ODB ...
2025-01-09在如今这个信息爆炸的时代,数据已然成为企业的生命线。无论是科技公司还是传统行业,数据分析正在深刻地影响着商业决策以及未来 ...
2025-01-08“数据为王”相信大家都听说过。当前,数据信息不再仅仅是传递的媒介,它成为了驱动经济发展的新燃料。对于企业而言,数据指标体 ...
2025-01-07在职场中,当你遇到问题的时候,如果感到无从下手,或者抓不到重点,可能是因为你掌握的思维模型不够多。 一个好用的思维模型, ...
2025-01-06在现代企业中,数据分析师扮演着至关重要的角色。每天都有大量数据涌入,从社交媒体到交易平台,数据以空前的速度和规模生成。面 ...
2025-01-06在职场中,许多言辞并非表面意思那么简单,有时需要听懂背后的“潜台词”。尤其在数据分析的领域里,掌握常用术语就像掌握一门新 ...
2025-01-04在当今信息化社会,数据分析已成为各行各业的核心驱动力。它不仅仅是对数字进行整理与计算,而是在数据的海洋中探寻规律,从而指 ...
2025-01-03又到一年年终时,各位打工人也迎来了展示成果的关键时刻 —— 年终述职。一份出色的年终述职报告,不仅能全面呈现你的工作价值, ...
2025-01-03在竞争激烈的商业世界中,竞品分析对于企业的发展至关重要。今天,我们就来详细聊聊数据分析师写竞品分析的那些事儿。 一、明确 ...
2025-01-03在数据分析的江湖里,有两个阵营总是争论不休。一派信奉“大即是美”,认为数据越多越好;另一派坚守“小而精”,力挺质量胜于规 ...
2025-01-02数据分析是一个复杂且多维度的过程,从数据收集到分析结果应用,每一步都是对信息的提炼与升华。可视化分析结果,以图表的形式展 ...
2025-01-02在当今的数字化时代,数据分析师扮演着一个至关重要的角色。他们如同现代企业的“解密专家”,通过解析数据为企业提供决策支持。 ...
2025-01-02数据分析报告至关重要 一份高质量的数据分析报告不仅能够揭示数据背后的真相,还能为企业决策者提供有价值的洞察和建议。 年薪 ...
2024-12-31数据分析,听起来好像是技术大咖的专属技能,但其实是一项人人都能学会的职场硬核能力!今天,我们来聊聊数据分析的核心流程,拆 ...
2024-12-31