- SAS教程
- SAS - 主页
- SAS - 概述
- SAS - 环境
- SAS - 用户界面
- SAS - 程序结构
- SAS - 基本语法
- SAS - 数据集
- SAS - 变量
- SAS - 字符串
- SAS - 阵列
- SAS - 数字格式
- SAS - 运营商
- SAS - 循环
- SAS - 决策
- SAS - 函数
- SAS - 输入方法
- SAS - 宏
- SAS - 日期和时间
- SAS 数据集操作
- SAS - 读取原始数据
- SAS - 写入数据集
- SAS - 连接数据集
- SAS - 合并数据集
- SAS - 数据集子集化
- SAS - 排序数据集
- SAS - 格式化数据集
- SAS-SQL
- SAS - 输出传输系统
- SAS - 模拟
- SAS 基本统计程序
- SAS-算术平均值
- SAS-标准差
- SAS - 频率分布
- SAS - 交叉表
- SAS - T 测试
- SAS - 相关性分析
- SAS - 线性回归
- SAS - 布兰德-奥特曼分析
- SAS-卡方
- SAS - 费舍尔精确测试
- SAS - 重复测量分析
- SAS-单向方差分析
- SAS-假设检验
- SAS 有用资源
- SAS - 快速指南
- SAS - 有用的资源
- SAS - 问题与解答
- SAS - 讨论
SAS - 宏
SAS 有一个强大的编程功能,称为宏,它使我们能够避免重复的代码部分,并在需要时一次又一次地使用它们。它还有助于在代码中创建动态变量,这些变量可以为同一代码的不同运行实例采用不同的值。还可以为代码块声明宏,这些代码块将以与宏变量类似的方式重复使用多次。我们将在下面的示例中看到这两个内容。
宏观变量
这些变量保存着 SAS 程序一次又一次使用的值。它们在 SAS 程序的开头声明,并在程序正文中稍后调用。它们的范围可以是全局的或局部的。
全局宏变量
它们被称为全局宏变量,因为它们可以被 SAS 环境中可用的任何 SAS 程序访问。一般来说,它们是系统分配的变量,可供多个程序访问。一个常见的例子是系统日期。
例子
下面是一个名为 SYSDATE 的 SAS 变量示例,它表示系统日期。考虑这样一个场景:每天生成报告时在 SAS 报告的标题中打印系统日期。标题将显示当前日期和日期,而无需我们为它们编码任何值。我们使用 SASHELP 库中提供的名为 CARS 的内置 SAS 数据集。
proc print data = sashelp.cars; where make = 'Audi' and type = 'Sports' ; TITLE "Sales as of &SYSDAY &SYSDATE"; run;
当上面的代码运行时,我们得到以下输出。
局部宏变量
这些变量可以通过 SAS 程序访问,其中它们被声明为程序的一部分。它们通常用于向相同的 SAS 语句提供不同的变量,以便它们可以处理数据集的不同观察结果。
句法
局部变量使用以下语法声明。
% LET (Macro Variable Name) = Value;
这里的值字段可以根据程序的需要采用任何数字、文本或日期值。宏变量名称是任何有效的 SAS 变量。
例子
SAS 语句通过在变量名称开头附加&字符来使用变量。下面的程序让我们了解了品牌“Audi”和类型“Sports”的所有观察结果。如果我们想要不同 make的结果,我们需要更改变量make_name的值,而不更改程序的任何其他部分。如果是 Bring 程序,则可以在任何 SAS 语句中一次又一次地引用该变量。
%LET make_name = 'Audi'; %LET type_name = 'Sports'; proc print data = sashelp.cars; where make = &make_name and type = &type_name ; TITLE "Sales as of &SYSDAY &SYSDATE"; run;
当上面的代码运行时,我们得到与前面的程序相同的输出。但是,让我们将类型名称更改为“Wagon”并运行相同的程序。我们会得到下面的结果。
宏程序
宏是一组由名称引用的 SAS 语句,并可以使用该名称在程序中的任何位置使用它。它以 %MACRO 语句开始,以 %MEND 语句结束。
句法
局部变量使用以下语法声明。
# Creating a Macro program. %MACRO <macro name>(Param1, Param2,….Paramn); Macro Statements; %MEND; # Calling a Macro program. %MacroName (Value1, Value2,…..Valuen);
例子
下面的程序在名为“show_result”的宏下声明了一组 SAT staemnet ;该宏正在被其他 SAS 语句调用。
%MACRO show_result(make_ , type_); proc print data = sashelp.cars; where make = "&make_" and type = "&type_" ; TITLE "Sales as of &SYSDAY &SYSDATE"; run; %MEND; %show_result(BMW,SUV);
当上面的代码运行时,我们得到以下输出。
常用宏
SAS 有许多内置于 SAS 编程语言中的 MACRO 语句。它们被其他 SAS 程序使用,而无需显式声明它们。常见的示例是 - 当满足某些条件时终止程序或捕获程序日志中变量的运行时值。以下是一些示例。
宏%PUT
该宏语句将文本或宏变量信息写入 SAS 日志。在下面的示例中,变量“today”的值被写入程序日志。
data _null_; CALL SYMPUT ('today', TRIM(PUT("&sysdate"d,worddate22.))); run; %put &today;
当上面的代码运行时,我们得到以下输出。
宏%RETURN
当某些条件评估为真时,执行此宏会导致当前正在执行的宏正常终止。在下面的示例中,当变量“val”的值变为 10 时,宏终止,否则继续。
%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;
当上面的代码运行时,我们得到以下输出。
宏%END
此宏定义包含一个%DO %WHILE循环,根据需要,该循环以 %END 语句结束。在下面的示例中,名为 test 的宏接受用户输入并使用该输入值运行 DO 循环。DO循环的结束是通过%end语句来实现的,而宏的结束是通过%mend语句来实现的。
%macro test(finish); %let i = 1; %do %while (&i <&finish); %put the value of i is &i; %let i=%eval(&i+1); %end; %mend test; %test(5)
当上面的代码运行时,我们得到以下输出。