SAS学习笔记46 宏变量的可使用范围
全局宏变量
在宏程序内部,除了使用%GLOBAL语句创建。在某些情况下,还可以直接使用DATA步中的CALL SYMPUT创建。
在一个宏程序中,在包含CALL SYMPUT的DATA步程序之前,如果没有局部宏变量存在(即SAS系统还没有为该宏创建Local Symbol Table),那么该CALL SYMPUT创建的宏变量为全局的宏变量(注:%LET语句和INTO子句无此功能)。即使在DATA步之后有了局部的宏变量(有了Local Symbol Table),CALL SYMPUT创建的宏变量仍然是全局的
如果该宏程序是带参数的宏程序,或者在DATA步之前使用%LOCAL语句(或者%LET语句,或者INTO子句)创建了局部宏变量,那么SAS系统会为该宏程序创建一个Local Symbol Table;所以CALL SYMPUT创建的宏变量会存储在Local Symbol Table中,也就是会变成局部宏变量
因此,CALL SYMPUT创建的宏变量究竟是全局的,还是局部的,要看该DATA步所在的环境。如果在该DATA步执行时,无Local Symbol Table,那么创建的宏变量就为全局的;反之,就是局部的宏变量
特别奇葩的情况
CALL SYMPUT除以上情况下可创建全局宏变量外,还有一种比较奇葩的情况。即使在DATA步之前有Local Symbol Table,CALL SYMPUT创建的宏变量仍旧是全局的


在CREATE_GLOBAL宏程序中的DATA步是不完整的,没有RUN语句。导致在宏运行后,DATA步并没有执行(因此没有创建宏变量GL_VAR,这也是为什么在CREATE_GLOBAL宏内部无法输出GL_VAR的值)。
紧接着,在后面的OPEN CODE中遇到RUN语句,然后才执行该DATA步,实际上该DATA步是在OPEN CODE的环境中运行的。因此,创建的宏变量是全局的宏变量
SAS学习笔记46 宏变量的可使用范围的更多相关文章
- SAS学习笔记41 宏变量存储及间接引用
Macro Variables存储在“Symbol Table”中.它是由Macro Processor在SAS启动时自动创建并维护的.SAS提供了一张视图来供我们查看Symbol Table中的内容 ...
- SAS学习笔记10 宏变量
一个宏变量存放的值保持不变直到被修改(全局变量) 引用时,变量名前加上"&" 宏变量在引用时放在双引号之间会被解读(单引号不会被解读) 用户定义的宏变量,有三种方式: %l ...
- SAS学习笔记44 宏函数
类SAS函数的宏函数 该部分函数共5个,其无论是名字.语法.功能都与SAS函数类似,只是在函数名前多了一个“%”.这5个宏函数分别是: %INDEX %LENGTH %SCAN %SUBSTR %UP ...
- SAS学习笔记43 宏语句
流程控制 %GOTO语句与%label语句是结合起来使用的.首先通过%label语句定义一个位置,使用%GOTO语句可直接将程序的执行位置跳到该label标记位置,达到控制程序执行顺序的目的.可实现与 ...
- SAS学习笔记37 宏程序中parmbuff选项
该选项用于指定宏可以接受可变参数列表,而且参数值保存在SYSPBUFF宏变量中.parmbuff的参数价值,其实就是每次执行宏程序时,可以指定不同数量的参数值,这些宏参数被保存在&syspbu ...
- SAS学习笔记42 宏程序
Autocall Macro是由SAS提供的一些实现特定功能的Macro Program,可以在代码中直接使用 其中以Q开头的相比正常的多了隐藏特殊字符的功能(称之为Macro Quoting): K ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之<SAS编程与数据挖掘商业案例>(3)变量操作.观测值操作.SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(5)SAS宏语言、SQL过程
SAS学习笔记之<SAS编程与数据挖掘商业案例>(5)SAS宏语言.SQL过程 1. 一个SAS程序可能包含一个或几个语言成分: DATA步或PROC步 全程语句 SAS组件语言(SCL) ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制
SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...
随机推荐
- linux服务器执行cd和ls等等命令都有卡顿现象问题记录
一 执行命令free -gh 1. free 命令显示系统内存的使用情况,包括物理内存.交换内存(swap)和内核缓冲区内存. 2. -g 表示以G单位显示, -m以兆单位显示, h会在数字后面 ...
- php手记之05-tp5软删除
01-需要在设置软删除的模型里设置
- arcgis python 布局中所有元素平移
# Author: ESRI # Date: July 5, 2010 # Version: ArcGIS 10.0 # Purpose: This script will loop through ...
- linux使用nslookup查询dns
nslookup命令主要用于查询DNS信息 nslookup工具的安装以及使用使用yum install bind-utils安装即可 交互模式与非交互模式直接运行nslookup即可进入交互模式,连 ...
- 阶段5 3.微服务项目【学成在线】_day18 用户授权_13-细粒度授权-细粒度授权介绍
3 细粒度授权 3.1 需求分析 什么是细粒度授权? 细粒度授权也叫数据范围授权,即不同的用户所拥有的操作权限相同,但是能够操作的数据范围是不一样的.一个 例子:用户A和用户B都是教学机构,他们都拥有 ...
- 随机数据构造-Faker
from faker import Faker # fake = Faker() #本地化处理 fake = Faker('zh_CN') # print(fake.name()) # print(f ...
- PAT 甲级 1048 Find Coins (25 分)(较简单,开个数组记录一下即可)
1048 Find Coins (25 分) Eva loves to collect coins from all over the universe, including some other ...
- ALV显示金额字段值扩大100倍
内表数据 物料 库位 期末庫存金額F0D7004DSA 1PYF 701410.944F0D7004DSA 1SNT ...
- MySQL安装时出现Apply Security Settings错误的解决办法(转)
最近在学习MySQL时,下载了MySQL5.5版本的安装包,在配置向导的最后的页面却出现了Apply Security Settings的错误.第一次安装时比较顺利,中途卸载了一下,结果第二次安装的时 ...
- cut截取数据
参考文档 https://blog.csdn.net/caoshunxin01/article/details/79355566 [root@kube-node3 ~]# cat tab_space. ...