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-%THEN/%ELSE Statement

总的来说,%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中.

 

 

posted @ 2022-05-20 19:18  Iving  阅读(341)  评论(0编辑  收藏  举报