<progress id="zvesa"></progress>

  1. <dd id="zvesa"></dd>

        <button id="zvesa"><acronym id="zvesa"></acronym></button>

        <dd id="zvesa"></dd>

        SAS巖論 | Macro系列(4)——Macro Variables(1)

           公眾號:SAS中文論壇     信息來源:時間:2020-04-04 19:25:02

        Macro系列導讀

        SAS Macro作為SAS高手不可或缺的一項技能,是因為它功能足夠強大,能極大的提升程序開發效率;使你的時間和精力投入在更有價值的事情上。

        Macro系列文章,將會逐一奉上SAS Macro的點點滴滴,帶你踏上從認識Macro到熟練使用Macro之路。掌握SAS Macro,將會使你的SAS編程能力更上一層樓。

        上期文章“運行機制”對SAS程序及Macro的運行機制進行了說明。SAS跟其他編程語言一樣,從大的方面講主要包含Compilation和Execution兩個階段。但在Compilation之前還有一個Tokenization的過程。而Macro的處理就是在這個過程中間進行的,通過Macro Trigger來啟動Macro Processor處理Macro。因此在程序進入Compilation之前,Macro就處理完畢。這也就是為什么Macro可以協助你完成一些SAS程序的生成。

        Macro系列(4)——Macro Variable(1)

        本期文章對Macro Variable進行詳細的闡述,從構成、創建、使用、刪除這幾個角度去說明,結合示例,對用法進行細致介紹。

        Macro Variables總述

        Macro Variables從本質上來講就是實現最直接的文本替換。它與Data Step中的Variables(包括來自Data Set和Data Step中新創建的)是完全不同的,而且與Data Set是沒有任何關系的。因此為了將二者區別開來,在使用Macro Variables時要在前面加一個“&”,代表其后面的是一個Macro Variable,而不是Data Step中的Variables。

        Macro Variables從構成上來講包括兩部分:SAS系統提供的,用戶自定義的。

        這兩種Macro Variables在使用上是一樣的,都是通過前置“&”來使用。其區別主要體現在

        • Automatic Macro Variables由于是SAS系統提供的,可直接使用;而User-Defined Macro Variables必須要先創建,才可以使用;

        • 大部分Automatic Macro Variables的值是不能被用戶更新的,僅有部分可以;而所有的User-Defined Macro Variables的值是可以被不斷修改的;

        Automatic Macro Variables

        Automatic Macro Variables是在SAS啟動時由Macro Processor自動創建的,包含了當前SAS會話及操作系統相關的信息。例如:SAS版本,安裝平臺,啟動日期、時間,操作系統版本,主機名,當前用戶等等。其有以下幾個特點:

        • SAS啟動時自動創建,可直接使用;

        • 全局變量,在任何地方都可以使用;

        • 一般情況下由SAS系統賦值及更新值;

        • 僅有部分可被用戶更新值;


        大部分Automatic Macro Variables都是以SYS開頭的,此處只列舉部分(了解所有的請參見文末指引):

        使用示例:

        title"The Courses Information";

        footnote"Created &systime &sysday,&sysdate9";

        footnote2"on the &sysscp system using Release&sysver";

        procprintdata=sasuser.courses;

        run;

        輸出結果:

        Automatic Macro Variables一般情況下比較少用到。即使用到,也基本就是像上面示例一樣,在報表打印的時候輸出日期、時間、系統、版本相關的信息。但需要注意的是,上面示例用到的SYSDATE,SYSTIME,SASDAY等日期時間相關的這幾個,其值是SAS系統啟動時的日期時間,跟系統當前的日期不一定一樣,時間肯定不一樣。大部分AutomaticMacro Variables的值在SAS系統啟動那一刻就確定了,基本不會發生改變。

        額外補充:為了方便介紹后文,先介紹一個Macro Statement。一般情況下,需要查看Macro Variable的值,通過%PUT語句便可輕松實現。該語句與DATA STEP中的PUT語句是類似的,就是將Variable的值輸出到日志當中。例如:

        %PUT &SYSDATE;

        User-Defined Macro Variables

        User-Defined Macro Variables顧名思義,就是用戶創建的,掌控權完全在用戶手里。其值可以由用戶隨意修改,也可以直接刪除??筛鶕煌那闆r,通過三種方式創建一個Macro Variable。

         

        1. %LET STATEMENT

        %let Statement是眾多Macro Statements中的一員,其主要功能就是創建新的Macro Variables,并賦予值;對于已經存在的Macro Variable,進行更新值的操作。其語法格式:

        %LET variable = value;

        • variable為Macro Variable Name,要符合SAS命名規范;

        • value為初始值,最大可存儲65535個字符。

        若variable或者value中包含Macro Variable,則會對其先進行解析。例如:

        小貼士

        Macro Variables其本質就是文本替換,它對所有賦給它的值都當做文本串。因此把一個加法運算表達式賦給它,它會原模原樣保存,并不會對其做計算。這也是為什么它的取值限定長度為65535個字符。

        如果非要做計算,可通過Macro Function完成,在后續文章中會介紹。

         

        2. DATA STEP

        很多時候需要將Data Step中某變量的值保存下來,在后面的過程中使用。此時,如果你想到使用%LET語句來完成,說明你上一期的文章沒看,或者忘記了。(趕緊回去復習:

        蜘蛛池