宏变量
可以替代重复的变量和代码
-
定义:
%let indvars = ;
-
引用 (解析):
&
(对文本串的替换) -
间接引用:
& && &&&
宏处理器对多个“&”处理规则是:从左到右扫描,若宏变量前仅含有一个“&”,则解析该宏变量;否则将相邻的两个“&”替换成一个“&”,重复上述扫描过程,直到解析过程完成 -
输出:
%put text;
(后面默认就是文本串,不需要加引号;与put语句不同) -
输出所有系统自带 / 用户自定义 / 所有 的宏变量:
%put _automatic_/_user_/_all_
→ e.g.title ="today's date is &SYSDATE9 and today is &SYSDAY";
当宏变量被嵌入在标题语句中,只能用双引号不能用单引号 -
分隔符
. (句点)
宏变量被引用时,SAS无法识别连接其后的文本,需要使用分隔符告知分隔符前的为宏变量部分。使用句点.作为宏变量分隔符。
→ e.g.%LET libref=sashelp; proc print data=&libref..class; run;
-
全局宏变量(由宏程序之外定义) VS. 局部宏变量
-
删除:
%symdel 宏变量名1 宏变量名2;
宏函数
宏字符串处理函数的参数可以是任意文本和(或)宏触发器:固定文本、宏变量引用、宏函数、宏调用。
固定文本参数不需要引号
- 常用函数
宏函数 | 使用方法 | 功能 |
---|---|---|
%upcase | %upcase(string) | 转换小写字母为大写字母 |
%substr | %substr(string, n1, n2) | 从字符串中提取子串 |
%scan | %scan(string, n) | 从字符串中提取一个词 |
%index | %index(string) | 在字符串中搜索指定文本 |
%eval | 进行算术运算和逻辑运算 | |
%sysfunc | %str(argument) | 执行SAS函数 |
%str | 引用特殊字符(屏蔽(删除正常含义)特殊符号:+ - * / , < > = ; ’ " LT EQ GT LE GE NE AND OR NOT blank) | |
%nrstr | %nrstr(title “S&P 500”; ) | 引用特殊字符,包括SAS触发器 |
symputx例程和symget函数
实现在不同过程步中传递数据
- Symputx例程 —— 把数据步的信息传给宏变量
CALL SYMPUTX(“new_macro-variable”, value_in_string)
- 参数1是我们正在创建的宏变量将存储数据步正在传递出的信息
- 参数2是字符串格式的值
- 新的宏变量是文本型,用匹配引号括起来
- Symget函数 —— 把宏变量的信息传给数据步
symget(“macro-variable”)
- 参数可以是宏变量的名字,字符串变量或者字符表达式。
- 动态赋值宏变量
proc means data = hsb2 n;
var write;
where write>=55;
output out=w55 n=n;
run;
proc print