zoukankan      html  css  js  c++  java
  • 关于宏MACRO,我们需要知道的事

    一、先从最宏观的角度来了解宏,这里的宏观角度是指程序的运行流程:

    1,提交代码后,SAS先把代码读取储存到堆栈中;

    2,用文本扫描插件来扫描堆栈中的代码,从上到下,从左到右;

    3,扫描到一个分号,则编译之前的代码,(有错则警告报错或者停止扫描)

    4,读到%,&的宏则马上调用宏编译器对宏进行替换,直到替换完为止;

    5,扫描到代码边沿(RUN,DATA,PROC )则暂停扫描,执行以上代码;

    6,然后接着扫描下一步,重复2-5步骤。

    可以理解成一小段代码给你,先把宏给替换完再执行别的。

    二、储存宏变量

    %LET在宏的外面,则直接检查为全局宏变量表,若存在则替换刷新该宏值,

    若在宏函数里面,则:

    1,检查局部宏变量表,若存在则更新,

    2,不存在则检查全局宏变量表,存在则更新,

    3,不存在则在局部宏变量表创建一个该宏变量。

    三、类似的工作久了,可以将一些常用的宏写在一个固定的逻辑库中,以后可以随时调用,以提高工作效率。

    如:

    LIBNAME ZLJ_MACRO "H:\ZLJ_MACRO";
    OPTIONS MSTORED SASMSTORE=ZLJ_MACRO;
    %MACRO A/STORE SOURCE;
        PROC FREQ;
        TABLES X/MISSING;
        RUN;
    %MEND;

    第二句是为了指明存放宏 的逻辑库,如要将一个宏储存起来,则只需想第三行一样写“STORE SOURCE”就可以永久保存,调用可普通临时宏调用方法一样。

    本博文由博主原创,不得在非博主允许情况下用作商业用途。 如需转载请注明博客地址:http://www.cnblogs.com/immaculate
  • 相关阅读:
    LeetCode 977 有序数组的平方
    LeetCode 24 两两交换链表中的节点
    LeetCode 416 分割等和子集
    LeetCode 142 环形链表II
    LeetCode 106 从中序与后序遍历序列构造二叉树
    LeetCode 637 二叉树的层平均值
    LeetCode 117 填充每个节点的下一个右侧节点
    LeetCode 75 颜色分类
    redhat 7.4 挂载ntfs格式的u盘并且使用
    redhat 查看CPU frequency scaling(CPU频率缩放)
  • 原文地址:https://www.cnblogs.com/immaculate/p/6291190.html
Copyright © 2011-2022 走看看