开发手册 欢迎您!
软件开发者资料库

SAS - Macros

SAS Macros - 从基本概念到高级概念,从简单而简单的步骤学习SAS,其中包括概述,环境,用户界面,程序结构,基本语法,数据集,变量,字符串,数组,数字函数,运算符,循环,决策,函数,输入法,宏,日期和时间,SQL,输出传递系统,模拟,直方图,图表,散点图,箱线图,算术平均值,标准偏差,频率分布,交叉制表,T检验,方差,线性回归,Bland- Altman分析,卡方,Fishers精确测试,单向Anova,重复测量分析,假设检验。

SAS具有强大的编程功能,称为,它允许我们避免重复的代码段,并在需要时反复使用它们.它还有助于在代码中创建动态变量,这些变量可以为同一代码的不同运行实例采用不同的值.也可以为代码块声明宏,这些代码块将以与宏变量类似的方式重复使用多次.我们将在下面的示例中看到这两个.

宏变量

这些变量包含一次又一次使用的值一个SAS程序.它们在SAS程序开始时声明,并在程序正文中稍后调用.它们可以是全局或本地范围.

全局宏变量

它们被称为全局宏变量,因为它们可以被任何可用的SAS程序访问SAS环境.通常,它们是系统分配的变量,可由多个程序访问.一般示例是系统日期.

示例

下面是一个名为SYSDATE的SAS变量示例,它表示系统日期.考虑在每天生成报告时在SAS报告的标题中打印系统日期的方案.标题将显示当前日期和日期,而不会为它们编码任何值.我们使用SASHELP库中提供的内置SAS数据集.

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


当运行上面的代码时,我们得到以下输出.

global_macro_result

本地宏变量

这些变量可以被SAS程序访问,在这些程序中它们被声明为程序.它们通常用于向相同的SAS语句sl提供不同的varaibel,以便处理数据集的不同观察结果.

语法

本地使用以下语法对变量进行decalred.

% LET (Macro Variable Name) = Value;


此处,Value字段可以根据程序的要求获取任何数值,文本或日期值.宏变量名是任何有效的SAS变量.

示例

SAS语句使用&字符附加在变量名称的开头.下面的程序让我们看到制作'奥迪'并输入'体育'.如果我们想要不同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;


当运行上面的代码时,我们获得与前一个程序相同的输出.但是,让我们将类型名称更改为'Wagon'并运行相同的程序.我们将得到以下结果.

local_macro_result

宏程序

宏是一组SAS语句,由名称引用,并使用该名称在程序中的任何地方使用它.它以%MACRO语句开头,以%MEND语句结束.

语法

使用以下语法声明局部变量.

# Creating a Macro program.%MACRO (Param1, Param2,….Paramn);Macro Statements;%MEND;# Calling a Macro program.%MacroName (Value1, Value2,…..Valuen);


示例

以下程序在名为'show_result'的宏下对一组SAT staemnets进行decalres; 此宏由其他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);


当运行上面的代码时,我们得到以下输出.

program_macro_result

常用Macro

SAS有许多MACRO语句,这些语句是用SAS编程语言构建的.它们被其他SAS程序使用而没有明确地声明它们.常见的例子是 - 在满足某些条件时终止程序或在程序日志中捕获变量的运行时值.以下是一些示例.

Macro%PUT

此宏语句将文本或宏变量信息写入SAS日志.在下面的示例中,变量'today'的值被写入程序日志.

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


Macro%返回

执行此宏会导致当前正在执行的正常终止某些条件评估为真时的宏.在下面的示例中,当变量"val"的值变为10时,宏将终止其它接口.

%macro check_condition(val);   %if &val = 10 %then %return;   data p;      x = 34.2;   run;  %mend check_condition;  %check_condition(11)  ;


Macro%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)