Sas 简明教程
SAS - Macros
SAS 有一个名为 Macros 的强大编程功能,该功能允许我们避免使用代码的重复部分,并在需要时多次使用它们。它还有助于在代码中创建动态变量,这些变量可以在同一代码的不同运行实例中采用不同的值。对于将多次以类似宏变量的方式重新使用的代码块,还可以声明宏。我们在下面的示例中将看到这两个。
Macro variables
这些变量包含将被 SAS 程序反复使用的值。它们在 SAS 程序的开头进行声明,并在程序主体中进行后期调用。它们在作用域中可以是全局的或局部的。
Global Macro variable
它们被称为全局宏变量,因为任何在 SAS 环境中可用的 SAS 程序都可以访问它们。一般而言,它们是由系统分配的变量,多个程序访问这些变量。系统日期就是一个通用的示例。
Example
下面是名为 SYSDATE 的 SAS 变量的一个示例,它表示系统日期。考虑这样一个情景,在每天生成的报表标题中打印系统日期。标题将显示当前日期和星期,而我们并不会为此对它们进行任何值编码。我们使用 SASHELP 库中可用的称为 CARS 的内置 SAS 数据集。
proc print data = sashelp.cars;
where make = 'Audi' and type = 'Sports' ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
运行上述代码后,我们得到以下输出。
Local Macro variable
这些变量可以通过 SAS 程序访问,其中它们被声明为程序的一部分。它们通常用于向同一个 SAS 语句 sl 提供不同的变量,使它们可以处理数据集的不同观测值。
Syntax
使用以下语法声明局部变量。
% LET (Macro Variable Name) = Value;
此处,根据程序要求,值字段可以采用任何数字、文本或日期值。宏变量名称是任何有效的 SAS 变量。
Example
SAS 语句使用 & 字符追加在变量名开头,由此使用这些变量。下面的程序为我们获取所有关于品牌为“奥迪”且类型为“跑车”的观测值。如果我们想要 different make 的结果,我们需要更改变量 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;
运行上述代码后,我们得到的输出与前一个程序相同。但是,让我们将 type name 更改为 'Wagon' 并运行同一程序。我们将得到以下结果。
Macro Programs
宏是一组 SAS 语句,用名称引用它们,并在程序的任何位置使用该名称。它们以 %MACRO 语句开头,以 %MEND 语句结尾。
Commonly Used Macros
SAS 编程语言中有许多内置的 SAS MACRO 语句。其他 SAS 程序可以使用它们,而不必显式声明它们。常见示例有 - 当满足某些条件时终止程序或者在程序日志中捕获变量的运行时值。以下是一些示例。
Macro %PUT
此宏语句将文本或宏变量信息写入 SAS 日志。在以下示例中,将变量“today”的值写入程序日志。
data _null_;
CALL SYMPUT ('today',
TRIM(PUT("&sysdate"d,worddate22.)));
run;
%put &today;
运行上述代码后,我们得到以下输出。