个性化阅读
专注于IT技术分析

什么是SAS宏?宏用法详解

点击下载

本文概述

SAS提供了一个强大的编程功能, 称为宏。宏基本上有助于在不同位置多次重用代码, 因此我们不需要重复键入整个代码。它不仅减少了时间, 而且生成了无错误的代码。

宏由一组由特定名称指定的SAS语句组成, 因此可以通过使用该名称在程序中的任何位置使用它。它的语法以%Macro语句开始, 以%MEND语句结束。

宏也可以在代码块中声明, 以便可以将这些块重复使用几次以用于Macro变量。

SAS宏

创建宏的语法:

%MACRO <macro name>(Param1, Param2, ....Paramn);
Macro Statements;
%MEND;

调用宏的语法:

%MacroName (Value1, Value2, ...., Valu en);

其中

  • %MACRO:这是用于创建宏的语句。
  • 宏名称:这是给宏的名称。我们可以使用此名称在任何地方调用Macro。
  • 参数:这些是赋予宏以执行操作的参数。
  • 宏语句:这些是SAS内置宏语句, 可以直接使用。
  • %MEND:这是用于关闭宏的语句。
  • 值:这些是变量的值, 提供给宏以执行操作。

让我们通过一个例子来了解Macro:

在这里, 我们正在创建两个数据集。一个是样本, 另一个是演示。要运行这些数据集, 我们需要在两个数据集中都使用proc打印语句。此proc打印语句将在同一程序中写入两次, 因为代码的长度将不必要地增加。为了减少此不必要的长度, 我们使用Macro。

在下面的代码中, 我们将为proc打印语句创建一个由pri指定的宏。

例:

这是不带宏的常规代码:

Data sample;
Set sashelp.airline;
Run;
proc print;
run;
Data Demo;
setsashelp.cars;
Run;
proc print;
run

通过使用Macro, 我们可以重用此proc打印语句。在下面的代码中, 我们将为proc打印语句创建Macro pri, 以便我们可以在需要的地方使用它。

Data sample;
Set sashelp.airline;
run;
%pri;
Data Demo;
setsashelp.cars;
run;
%pri;

%Macro pri;
proc print;
run;
%mend;

SAS Macro的好处

  • 通过定义代码并多次重复使用, 可以简化我们的工作。
  • 我们可以在单个位置更改变量, 并且该变量将在多个位置反映。
  • 驱动程序的数据, 即, SAS根据实际数据值决定要做什么。
  • 它减少了代码的时间。
  • 它降低了代码的复杂性。

宏变量

这些变量包含一个SAS程序重复使用的值。我们可以在SAS程序的开头声明Macro变量, 然后在程序主体中将它们调出。

宏变量的范围可以是全局或局部。这些定义如下:

全局宏变量

全局宏变量可以由SAS环境中可用的任何SAS程序访问。通常, 这些是系统分配的变量, 可以由多个程序访问。全局宏变量的典型示例是系统日期。

例子

在以下示例中, 我们将使用全局SAS变量SYSDATE, 它表示系统日期。

考虑一种情况, 当我们生成报告时, 我们需要每天在SAS报告的标题中打印系统日期。

标题将显示当前日期和日期, 而在代码中未提供任何值。在这里, 我们使用SASHELP库中提供的称为CARS的SAS内置数据集。

proc print data = sashelp.cars;
where make = 'Audi' and type = 'Sports' ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

当我们在SAS Studio中执行上述代码时, 将获得以下输出。

SAS宏

局部宏变量

局部变量只能在声明它们的SAS程序中访问。它们通常用于在同一SAS语句中提供不同的变量, 以处理对数据集的不同观察结果。

句法:

% LET (Macro Variable Name) = Value;

其中

  • %LET:它创建一个Macro变量并为其分配一个值。
  • 宏变量名称:这是给本地宏变量的名称。
  • 值:这是一个值字段, 可以根据程序要求采用任何数字, 文本或日期值。

例:

可以通过在变量名称的开头使用&来声明Macro变量。在下面的示例中, 我们将声明两个局部变量, 一个是make_name, 另一个是type_name, 以从CARS数据集中获取值。

考虑以下代码:

%LET make_name = 'Audi'; /*Defining Macro Variable*/
%LET type_name = 'Wagon';
proc print data = sashelp.cars;
where make = &make_name and type = &type_name ;/*referencing Macro Variable*/
TITLE "Sales as of &SYSDAY &SYSDATE";
run;

当我们在SAS Studio中执行上述代码时, 将获得以下输出。

SAS宏

常用宏

SAS具有许多内置的MACRO语句, 可在任何SAS程序中使用它们, 而无需明确声明它们。以下是最常用的宏:

  • 宏%PUT
  • 宏%RETURN
  • 宏%END

宏%PUT

该宏语句用于将文本或宏变量信息写入SAS日志。在下面的示例中, 我们将把变量” today”的值写入程序日志。

Data _null_;
CALL SYMPUT ('today', TRIM(PUT("&sysdate"d, worddate22.)));
run;
%put &today;
data _null_;
CALL SYMPUT ('today', TRIM(PUT("&sysdate"d, worddate22.)));
run;
%put &today;

在SAS Studio中执行以上代码:

SAS宏

输出

SAS宏

按照上述代码, 已将变量” today”的值”&sysdate” d, worddate22。”写入程序日志。

宏%RETURN

当确定某个条件为真时, 此Macro语句用于终止当前正在执行的Macro。在下面的示例中, 如果将值1分配给变量var1, 则宏将停止执行, 并且DATA步骤将不会执行。

%macro checkit(var1);
   %if &var1 = 1 %then %return;
data a;
 x=10;
run;  
%mend checkit;  
%checkit(0)  
%checkit(1)

在SAS Studio中执行以上代码:

SAS宏

输出

SAS宏

按照上面的代码, 条件已被评估为真, 由于该条件终止了正在执行的宏, 并且尚未执行数据步骤。

宏%END

根据要求, 此宏语句用于结束%DO%WHILE循环。我们可以将其与%END语句一起使用。在下面的示例中, 名为demo的宏接受输入1, 并使用此输入值运行DO循环。 DO循环使用%End语句关闭, 而Macro语句使用%mend语句关闭。

%macro demo(finish);
   %let i=1;
   %do %while (&i<&finish);
      %put the value of i is &i;
      %let i=%eval(&i+1);
   %end;
%mend demo;
%demo(6)

在SAS Studio中执行以上代码:

SAS宏

输出

SAS宏

按照上面的代码, i的值已打印5次, 完成5次后, %End语句结束%Do%While循环。


赞(2)
未经允许不得转载:srcmini » 什么是SAS宏?宏用法详解

评论 抢沙发

评论前必须登录!