




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第十八課 SAS 宏功能簡介SAS 系統(tǒng)提供了強(qiáng)大的宏功能(macro facility),通過創(chuàng)建宏變量和宏能方便地完成:重復(fù)分析任務(wù),大大精減了程序量從系統(tǒng)獲取一些如 SAS 啟動(dòng)時(shí)間、日期、版本號(hào)等信息有條件地執(zhí)行數(shù)據(jù)步和過程步保持程序的獨(dú)立性和移植性,產(chǎn)生與數(shù)據(jù)無關(guān)的程序變量在不同數(shù)據(jù)步和過程步之間傳遞數(shù)據(jù)一、 SAS 宏變量宏變量(也稱符號(hào)變量)屬于SAS 宏語言的范疇,和數(shù)據(jù)步中的變量概念是不一樣的。除了數(shù)據(jù)行外,可以在 SAS 程序的任何地方定義和使變量。數(shù)據(jù)步變量是和數(shù)據(jù)集相聯(lián)系的,而宏變量是獨(dú)立于數(shù)據(jù)集的。數(shù)據(jù)集變量的值取決于正在處理的觀測,而一個(gè)宏變量的值總是保持不變,直到
2、被明確改變。1. 宏變量的定義定義一個(gè)宏變量的最簡單方法是使語句%LET,它的一般形式如下:%LET宏變量名=值;宏變量名遵從一般的SAS 命名規(guī)則。宏變量的值不需要加引號(hào),如果值加入引號(hào),則引號(hào)被作為宏變量值的一部分。宏變量的值可以是固定的字符串、其他宏變量的函數(shù)和宏調(diào)用。、宏2. 宏變量的為了一個(gè)宏變量的值,在宏變量前加上一個(gè)符號(hào)&,格式如下:&宏變量名宏變量被的效果就是變量的內(nèi)容直代宏變量名。3. 宏變量的使用舉例例如,想要打印、圖示和分析幾個(gè)數(shù)據(jù)集,但又希望避免重復(fù)鍵入每一個(gè)數(shù)據(jù)集名字以修改相同的程序代碼。解決方法是用%LET 語句創(chuàng)建一個(gè)宏變量 DSNAME,該宏變量賦值了一個(gè)數(shù)據(jù)集
3、名SURVEY。然后,這個(gè)宏變量在 PROC PR等許多過程和 TITLE 語句中被。程序如下:%Letdsname=survey ;Proc prdata=&dsname;Varnamesexbdatee;Title“Display of Data Set &dsname” ;Run ;要注意標(biāo)題語句 Title 平時(shí)既可以用單引號(hào)又可以引號(hào)圍住標(biāo)題,但如果有宏變量引用,則必須引號(hào),否則用單引號(hào)將當(dāng)作字符串處理。上面的程序中,只要修改宏變量 dsname 的賦值,就能對多個(gè)數(shù)據(jù)集執(zhí)行相同的打印輸出等操作。可用幾個(gè)%LET 語句來創(chuàng)建多個(gè)宏變量進(jìn)一步增強(qiáng)過程的通用性。例如,可用WHERE 語句
4、來規(guī)定用作打印和分析的一個(gè)范圍。如用%LET 語句把宏變量 START 和 END分別定義為開始和結(jié)束的日期。程序如下:%Letdsname=survey ;%Letstart=01jan79d ;%Letend= 31dec80d ;Proc prdata=&dsname;Varnamesexbdatee;Where&startbdate&end;Format bdate date7.;Title“Display of Data Set &dsname” ;Run ;這樣,通過適當(dāng)?shù)?LET 語句來簡單改變起始和結(jié)束日期,就能替代在 WHERE 語句中的多處改動(dòng)。提請大家注意宏變量賦值日期常
5、數(shù)01jan79d 的這種格式,也可以直接賦日期存儲(chǔ)值,如改成%Let start=6940 和%Let end=7670。二、 自動(dòng)宏變量SAS 的宏變量共有兩種:一是用戶定義的宏變量,如start、end。二是自動(dòng)宏變量,由 SAS 系統(tǒng)定義。上面所定義的宏變量 dsname、自動(dòng)宏變量是在系統(tǒng)啟動(dòng)時(shí)就已經(jīng)被創(chuàng)建,在SAS 系統(tǒng)退出前一直保持有效,能夠在 SAS系統(tǒng)的任何地方被。下表列出一些用戶常用的自動(dòng)宏變量:自動(dòng)宏變量作用值SYSDATE本次 SAS 啟動(dòng)的日期如 04AUG97SYSDAY本次 SAS 啟動(dòng)的如 MondaySYSTIME本次 SAS 啟動(dòng)的時(shí)間如 11:18SYSL
6、AST創(chuàng)建的數(shù)據(jù)集名字如 STUDY.SURVEYSYSDSN創(chuàng)建的數(shù)據(jù)集兩部分名字如 STUDYSURVEYSYSVER使用 SAS的版本如 6.12SYSSCP返回用戶主機(jī)系統(tǒng)的縮寫如 WIN例如,修改上面的程序,增加一個(gè)小標(biāo)題,在小標(biāo)題中自動(dòng)宏變量,程序如下:%Letdsname=survey ;%Letstart=01jan79d ;%Letend= 31dec80d ;%Letyst= Zuxin.Deng ;Proc prdata=&dsname;Varnamesexbdatee;Where&startbdate&end;Format bdate date7.;Title“Disp
7、lay of Data Set &dsname” ;Title2“&systime &sysday , &sysdate by &yst” ;Run ;三、 創(chuàng)建一個(gè)宏宏是一個(gè)被的文本,用一個(gè)名字識(shí)別它。最簡單的宏就像一個(gè)宏變量一樣工作,但復(fù)雜的宏可以包括分支和循環(huán)等結(jié)構(gòu),能實(shí)現(xiàn)許多宏變量不能實(shí)現(xiàn)的功能。1. 宏的定義和調(diào)用宏定義的一般形式如下:%MACRO宏名字(參數(shù)宏變量) ;宏實(shí)體 ;%MEND宏名字 ;%MACRO 語句是每一個(gè)宏的開始,同時(shí)必須給出這個(gè)宏的名字。宏實(shí)體可為任一個(gè)文本,SAS 語句或SAS 步,宏變量、函數(shù)和這些實(shí)體的組合。%MEND 語句必須圍住每個(gè)宏并表示宏結(jié)束。參
8、數(shù)宏變量是一些將要傳遞給宏調(diào)用的宏變量,不同參數(shù)宏變量之間用逗號(hào)隔開。SAS 程序中可以包括任意多個(gè)宏,且在程序中可以多次調(diào)用一個(gè)宏。在 SAS 中 宏調(diào)用的形式如下:%宏名字(參數(shù)值) ;定義了一個(gè)簡單通用的宏程序 INVOKE,它有兩個(gè)參數(shù)宏變量ame 和例如,dsname,用以傳遞給宏程序所需的過程名和數(shù)據(jù)集名。在調(diào)用這個(gè)宏程序時(shí)要將具體的參數(shù)宏變量值給出,其值分別為 Pr和Study.Survey。程序如下:%MACROINVOKE(ame,dsname) ;ProcameData=&dsnmae ;Title“ame of Data Set &dsname” ;Run ;INVOKE
9、 ;%MEND%INVOKE(Pr, Study.survey) ;上面這在執(zhí)行時(shí),將被宏處理器替換成下面這:ProcPrData=Study.survey;Title“Prof Data Set Study.survey” ;Run ;2. 具有分支和循環(huán)的宏與 SAS 系統(tǒng) DATA 步和 PROC 步中可以使用分支和循環(huán)語句一樣,也能在%MACRO和 %MEND語 句 間 , 用 條 件 %IF %THEN/%ELSE語 句 和 用 循 環(huán) %DO%END、%DO %UNTIL%END、%DO %WHILE%END 語句來產(chǎn)生更復(fù)雜的宏。雖然分支和循環(huán)的語句格式兩者不相同,但兩者的使用原
10、理和方法卻是相同的。通常SAS 宏程序比一般的SAS 語言程序要更難理解,主要的難點(diǎn)是宏程序中宏變量的傳遞和控制。例如,假設(shè)已有兩個(gè)宏CREATE 和PR,宏CREATE 可以從參數(shù)宏變量SETDATA1指定的數(shù)據(jù)集中創(chuàng)建一個(gè)新的數(shù)據(jù)集 STUDY.TEMP,宏 PR可以打印一個(gè)參數(shù)宏變量SETDATA2 指定的數(shù)據(jù)集?,F(xiàn)在要定義一個(gè)控制宏 CONTROL,假定有時(shí)需要對指定的數(shù)據(jù)集先運(yùn)行宏 CREATE,創(chuàng)建一個(gè)新的數(shù)據(jù)集 STUDY.TEMP 后,再調(diào)這個(gè)新產(chǎn)生的數(shù)據(jù)集;有時(shí)卻只要直接打印指定的數(shù)據(jù)集。那么,%THEN 語句來定義宏 CONTROL。程序如下:CREATE 打印可以用一個(gè)%
11、IF%Macrocreate(setname1) ;Datastudy.temp ;Set&setname1 ;Ifsex=M;%Letdsname=study.temp ;Run ;%Mendcreate ;%Macro pr(setname2) ;Procprdata=&setname2 ;TitleDisplay of Data Set &setname2 ;Run ;%Mend pr;%Macro control(getdata,dsname) ;%If%upcase(&getdata)=YES%Then%create(&dsname) ;%pr(&dsname) ;%Mend con
12、trol ;%control(no, study.survey) ;%control(yes,study.survey) ;當(dāng)規(guī)定參數(shù)宏變量 getdata 的值為大寫字符串 YES 或小寫字符串 yes 時(shí),%IF 條件成立,宏處理器執(zhí)行%THEN 的分句,即調(diào)%create(&dsname)。宏函數(shù)%upcase 的作用是轉(zhuǎn)化小寫文本為大寫,因此當(dāng) getdata 的值為小寫字符串 yes 時(shí),%IF 條件也成立。在調(diào)%create時(shí)要給出參數(shù)宏變量 setname1 的值, 使study.survey。變量&dsname 中的值, 其值為字符串當(dāng)規(guī)定參數(shù)宏變量 getdata 的值為字符
13、串YES 或 yes 以外的任何值時(shí),%IF 條件不成立,%pr(&dsname)。提請注意的是,即使%IF 條件成立,執(zhí)行完%THEN 分句后,執(zhí)行調(diào)也同樣要執(zhí)行調(diào)因此調(diào)%pr(&dsname),但打印的數(shù)據(jù)集不同。%pr(setname2) 執(zhí)行時(shí),參數(shù)宏變量 setname2 中的值有兩種可能:當(dāng)%IF條件成立,執(zhí)行 %create 后,再執(zhí)行宏%pr (setname2) 時(shí),setname2 中的值應(yīng)該為 study.temp;當(dāng)%IF 條件不成立,直接執(zhí)行宏%pr (setname2) 時(shí),setname2 中的值應(yīng)該為 study.survey。正因?yàn)橛腥绱艘?,所以要在?cr
14、eate 中增加一條%Let dsname=study.temp語句,只要執(zhí)行了宏%create 就修改宏變量 dsname 的值為新建數(shù)據(jù)集名 study.temp。下面舉一個(gè)宏循環(huán)語句的使用例子。假定用戶想生成一系列變量名字用于某個(gè) SAS語句,如用在 DATA、VAR 和 TITLE 語句中??梢远x一個(gè)宏 names 來產(chǎn)生具有相同前綴的一系列變量名字??刹捎弥貜?fù)%DO 循環(huán)語句來實(shí)現(xiàn)。程序如下:%MACROnames(varnamber) ;%Don=1%to&number ;&varname &n%Run;%MENDnames ;Proc prdata=study.class ;Varname %names(Test,3) ;Title “%names(Test,3) generated by ma
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 變態(tài)駕照考試題目及答案
- 保潔面試考試題目及答案
- java設(shè)計(jì)模式考試題目及答案
- 2025山東練耳考試題及答案
- 廣東學(xué)考君錄課數(shù)學(xué)試卷
- 中班健康教案蓮花課件
- 2025-2030中國男女西服行業(yè)市場發(fā)展分析及商業(yè)模式與投融資戰(zhàn)略研究報(bào)告
- 2025-2030中國汽車設(shè)計(jì)行業(yè)現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報(bào)告
- 中班健康拾樹葉課件
- 2025-2030中國檸檬草水溶膠行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- GB/T 10610-2009產(chǎn)品幾何技術(shù)規(guī)范(GPS)表面結(jié)構(gòu)輪廓法評(píng)定表面結(jié)構(gòu)的規(guī)則和方法
- 熠搜家庭戶用光伏電站推介
- 濟(jì)源幼兒園等級(jí)及管理辦法
- 高中區(qū)域地理:極地地區(qū)南極、北極
- 房地產(chǎn)開發(fā)全流程培訓(xùn)講義課件
- DB44-T 2163-2019山地自行車賽場服務(wù) 基本要求-(高清現(xiàn)行)
- 云南省特種設(shè)備檢驗(yàn)檢測收費(fèi)標(biāo)準(zhǔn)
- DB15T 933-2015 內(nèi)蒙古地區(qū)極端高溫、低溫和降雨標(biāo)準(zhǔn)
- 有鍵螺旋槳及尾軸安裝質(zhì)量要求標(biāo)準(zhǔn)
- 工傷責(zé)任保險(xiǎn)單
- 固體廢物采樣培訓(xùn)
評(píng)論
0/150
提交評(píng)論