568 字

SAS 定义宏的三种用法 z

SAS; SAS; Macro; ;

原文地址http://www.cda.cn/view/18718.html

SAS 中定义宏变量方法主要有三种。

%LET 定义

这是最常用的方法。语法过程为:

%let 宏变量名=值;

调用宏变量:

&宏变量名
  1. 以分号作为宏变量定义的结束。
  2. 在定义时候不要加引号,系统会把引号当作宏变量的值之一。
  3. 宏变量的作用域分为全局局部
    • 一种在程序(这里一般是指一个宏程序)外定义,则在整个 SAS 任何地方都可以被调用。
    • 另外一种则是在程序内部,则作用在该程序出现宏变量后面,在程序外则不可以被调用,否则会出错。(如果一个程序内部定义有宏变量变成全局变量,则需要使用%global
  4. 当宏变量一个表达式,使用(感觉有错):
%str()
%let print=%str(proc print; run;);
  1. 如果宏变量是数值计算表达式,则需要根据数值类型使用二个不同的宏变量:
%eval_r()   用于计算整数例如:            %eval_r(1+2)
%sysevalf() 用于计算浮点数或者空值,例如:%eval_r(1.0+2.3)

data 步中定义 call symput()

这个方法只允许在data步中,这个一定需要注意。

语法过程:

call symput("宏变量名",值);

在 DATA 过程中,宏变量可以包括常值、变量值。或者函数赋予宏变量。

SQL 过程中定义

在使用 SQL 过程中定义宏变量,语法过程为:

SELECT 宏值
    INTO :宏变量名
    SEPARATED BY '分隔符号'

使用一个案例过程说明,以后我们再详细介绍其中的一个技巧:

data test;
    input var @@;
    datalines;
    1 2 3 4 5
    ;
run;

proc sql noprint ;
    select var into :macro_var
    separated by ' '
    from test;
quit;