zoukankan      html  css  js  c++  java
  • SAS的初级入门(六)

    1. SAS 中的宏

    SAS 中的宏就是一些功能的抽象,比如在一个程序中需要多次使用画图的程序,但是每次都写 plot 语句,太过于麻烦,所以这个时候,就需要抽象出一个通用的 SAS 宏来解决这个问题。

    (1)SAS 的宏

    Q:什么是宏?

    A:就是其他语言中所说的函数,功能。

    Q:如何定义一个宏?

    A:格式是以” %macro 宏名;“开始,然后以“%mend 宏名;”结束。

    (2)SAS 的宏变量

    Q:什么是宏变量?

    A:首先宏是脱离 data  步的,所以对于宏变量而言,只需要定义了,在整个 SAS 程序中就可以使用,相当于一个不变的变量,在定义之后,就可以直接使用。

    Q:宏变量该如何定义?

    A:格式是 %let 变量名-= 变量值;

    Q:宏变量在定义之后,如何使用呢?

    A:变量在定义之后,都是用来被使用的,所以,在引用宏变量的时候,只需要 &宏变量名,这样即可。

    (3)SAS 的宏参数

    Q:什么是宏参数?
    A:任何函数或者是功能,可能参数不同,但是功能是一样的,比如说吃饭这件事,对于老虎来说,吃饭吃的是肉,但是对于绵羊而言,吃得就是草。而宏参数就是传进来的参数。

    Q:宏参数应该如何使用?
    A:在创建宏的时候,在宏名的后面加一个括号,形如:%macro add(var1=name,var2=subname);其中 var1 和 var2 就是宏参数。

    例子:

     1 data mydata;
     2     input name $ age gender $;
     3     cards;
     4     a 12 male
     5     b 13 female
     6     c 14 male
     7     ;
     8 run;
     9 
    10 /* 创建一个数据集 */
    11 %macro create;
    12     data copy_data;
    13         set mydata;
    14         if gender = 'male';
    15 %mend create;
    16 
    17 /* 引用 init 宏 */
    18 %create;
    19 run;
    20 
    21 proc print data = mydata;
    22     title '原始数据集';
    23 run;
    24 
    25 proc print data = copy_data;
    26     title '筛选后数据集';
    27 run;

    要注意的是,在宏中是无法使用创建数据集的,就是说,在宏中是无法使用cards 这样的语句来创建数据集。

    例子中使用了两次 print 数据,但是数据集名不一样,这个时候就可以使用宏参数了。

    改进版例子:

     1 data mydata;
     2     input name $ age gender $;
     3     cards;
     4     a 12 male
     5     b 13 female
     6     c 14 male
     7     ;
     8 run;
     9 
    10 /* 创建一个数据集 */
    11 %macro create;
    12     data copy_data;
    13         set mydata;
    14         if gender = 'male';
    15 %mend create;
    16 
    17 /* 引用 init 宏 */
    18 %create;
    19 run;
    20 
    21 /* 打印数据集,宏参数为数据集名称 */
    22 %macro print(dataset);
    23     proc print data = &dataset;
    24     run;
    25 %mend print;
    26 
    27 /* 引用 print 宏 */
    28 %print(mydata);
    29 run;
    30 
    31 %print(copy_data);
    32 run;

    需要注意一下的是:
    在使用宏参数的时候,会遇到下列几种情况。

    (1)对于参数没有初始值的时候,直接填写参数名,形如:print(dataset)

    (2)对于参数需要使用初始值的时候,需要在参数名后面接上初始参数值,形如:print(dataset = mydata)

    (3)在给定初始参数值之后, 在调用函数的时候,如果想要改变参数值,直接使用 print (dataset = 指定值),这里的指定值与初始值应该不同

  • 相关阅读:
    Linux下让一个程序开机自动启动
    Heartbeat高可用解决方案
    NFS文件共享
    清除系统日志的三个脚本
    nfs+rsync+inotify实现文件的实时同步
    安装配置rsync服务端
    shell中如何进行算术运算
    linux下查看账号密码的过期时间和设置时间
    配置Nginx作为web server详解
    [LeetCode] 398. Random Pick Index ☆☆☆
  • 原文地址:https://www.cnblogs.com/elkan/p/11019568.html
Copyright © 2011-2022 走看看