- 一個宏變量存放的值保持不變直到被修改(
全局變量
) - 引用時,變量名前加上"&"
- 宏變量在引用時放在雙引號之間會被解讀(單引號不會被解讀)
用戶定義的宏變量,有三種方式:
- %let 宏變量名=宏變量值(宏變量值最大可存儲65535個字符)
- call symput(宏變量名,值);(這個方法只允許在data步中)
- proc sql
宏變量的引用
顯示宏變量及其值
-
_GLOBAL_ :輸出用戶自定義的宏變量當中的全局宏變量信息;
-
_LOCAL_ :輸出用戶自定義的宏變量當中的局部宏變量信息;(一般用在宏內部,因為只有在宏內部才有局部的概念)
-
_READONLY_ :輸出用戶自定義的宏變量中只讀的宏變量信息,包括全局和局部的;
-
_WRITABLE_:輸出用戶自定義的宏變量中可寫的宏變量信息,包括全局和局部的;
宏變量與后續文本的分隔
當宏變量跟后續文本緊密同時使用時,需要界定宏變量的結束位置
間接引用宏變量
“&宏變量名”是直接引用
如果引用的宏變量名是通過宏產生的,則需要間接引用,此時需要用:&&
DATA STEP
如果要在DATA STEP執行階段創建Macro Variable,就要使用執行階段生效的語句。在DATA STEP中可通過CALL SYMPUT來完成
CALL SYMPUT( macro-variable, value );
-
macro-varialbe為Macro Variable的名字,可以為引號引起來的字符串,也可以為DATA STEP中的字符變量;
-
value為Macro Variable的取值,可以為引號引起來的字符串;也可以為DATA STEP中的變量(如果是數值變量,SAS會進行一次自動轉換,將其轉換為字符串后賦給Macro Variable)
此外,還有另外一個CALL SYMPUTX也是用來在DATA STEP中創建Macro Variable。它與CALL SYMPUT的用法一模一樣,只有一個區別:
CALL SYMPUTX在給Macro Variable賦值的時候會移除Leading blanks和Trailing blanks
注意:%put語句在輸出時會移除輸出內容的Leading blanks和Trailing blanks
PROC SQL
SQL相比DATA步可以很快速的完成一些聚合運算。這些運算后的結果如果想要輸出到Macro Variable中,就需要用INTO子句來完成。其語法格式如下:
INTO :macro-variable-specification-1 <, :macro-variable-specification-2 ...>
特別注意,INTO子句中需要在每個創建的Macro Variable前加“:”
除了上面這種賦單值外,還可以賦多個值給某個Macro Variable,並且以指定的分隔符進行區分。例如:
%SYMDEL STATEMENT
當某個Macro Variable不再使用的時候,可以通過%symdel語句來刪除