- 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 - Bland-Altman 分析
- SAS - 卡方检验
- SAS - Fisher 精确检验
- 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;
此处,Value 字段可以根据程序需要采用任何数值、文本或日期值。宏变量名称是任何有效的 SAS 变量。
示例
SAS 语句使用在变量名称开头附加的&字符来使用这些变量。下面的程序获取制造商为“Audi”且类型为“Sports”的所有观测值。如果我们想要不同制造商的结果,我们需要更改变量make_name的值,而无需更改程序的任何其他部分。在程序中,此变量可以在任何 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 语句;此宏由其他 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 编程语言的内置语句。它们由其他 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)
运行上述代码后,我们将获得以下输出。