SAS简单运行机制
非宏程序:程序提交后会进入内存,叫做input stack;从input stack中逐行扫描code,如果有宏变量、宏程序等,进入macro compile后,把解析后的宏变量、宏程序返回input stack中,然后再逐行扫描。
宏程序:先扫描下,看有没有语法错误等。将其存入到一个Macro Catalog中。详见 How the Macro Processor Compiles a Macro Definition。扫描时遇到%开头的程序,就会触发 macro processor,直到遇到%MEND。如果是%IF,切记使用%THEN %DO %END;而不只是%THEN。或使用%str(;),参考
总的来说,%IF是用来生成code的,所以可能会有多个;符号。
1. Work Flow
token
SAS中有意义的最小单元;
装点门面,标示符。总共四类
1. 单引号或双引号及之内的内容
'aa aa b' "a b c"
2. 一切数值,以数字开头。
1 "01Mar2020"d 5E8.4
3. 一切变量名及format
var1 name1 _n_ dollor10.2
4. 特殊字符
; & : ,. <>?/@等
程序执行大致步骤
1. input stack 读入所有代码
2. scanner,通过每个 token 进行区分。
3. 编译
input @10 ssn comma11. name $30-50; 11个token
bouns=3.2*(wage-2000); 10个
plot date*revenue='$'/verf='30jun2001'd; 11个。
2. Macro
2.1
2.2 一般过程
如果遇到Macro标示符,则语句进入Macro Processor中处理。
%put &a;都会进入到Macro Processor中
"Title &m"只有&m进入到Macro Processor中。
当遇到Macro时,Macro Processor读入Macro变量,然后去Symbol Table 找Macro 的值,然后返回
input stack,然后再读入scanner中。
如果是整个宏(%put &a)则,把Macro值返回到Macro Processor中。
当执行%宏时,先读入到input stack,然后到Macro Processor,然后work.sasmacr去找宏程序,然后把
宏程序内的语句读入到input stack中,然后在扫描编译执行。
scanner把宏变量传到Macro Processor,直到解析至没有宏变量,返回到input stack中,再次把解析后的语句传到scanner中.
本文来自博客园,作者:Iving,转载请注明原文链接:https://www.cnblogs.com/SAS-T/p/16293515.html