版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第13章 變量輸入輸出格式,清華大學經(jīng)管學院 朱世武,本章內(nèi)容包括:,輸入格式; 輸出格式; SAS日期時間存貯方式; 日期時間輸入格式; 日期時間輸出格式; 缺失值處理。,輸入格式,輸入格式是SAS系統(tǒng)用來讀入數(shù)據(jù)值的一個指令。 輸入格式形式 INFORMAT . 選項說明: 通用規(guī)則: 所有輸入格式必須包含一個點(.)作為名字的一部分; 對于省略W和D值的輸入格式,使用系統(tǒng)缺省值。,輸入格式使用方法,INPUT語句; INPUT函數(shù); DATA步中用INFORMAT或ATTRIB語句; PROC步中用INFORMAT或ATTRIB語句。,INPUT語句,例13.1 列格式輸入。 input
2、 6 date ddmmyy10. +1 stocd $ 8. oppr 8.2; 例中,從第6列開始以DDMMYY10.格式讀入變量DATE, 第7列開始以長度為8的字符格式讀入變量STOCD,然后以數(shù)值格式8.2讀入變量OPPR。,INPUT函數(shù),例13.2 字符轉換數(shù)值。 data; x=98.6; y=input(x, 4.); put x= y=; run; 例中,INPUT函數(shù)和w.d輸入格式將X的字符值轉換為一個數(shù)值Y. INPUT函數(shù)對于數(shù)據(jù)的轉換是很有用的,當然,有更簡單的方法將字符值轉換為數(shù)值。 data; x=98.6; y=x-0; put x= y=; run;,例1
3、3.3 數(shù)值轉換為字符時會產(chǎn)生不正確結果。 data; x=2557898; y=input(x,$8.); put y; run; 例中,產(chǎn)生的結果為255, 不正確。,例13.4 PUT函數(shù)將數(shù)值轉換為字符。 data; x=2557898; y=put(x, $8.); put y; run; 例中,用PUT函數(shù)得到正確結果,即字符型2557898. data; x=2557898; y=put(x, $3.); put y; run; 例中,Y的結果為3E6.,在DATA步中用INFORMAT語句或ATTRIB語句,例13.5 DATA步中用INFORMAT語句。 data a; in
4、put x; informat x comma12.4; cards; 12,345.1234 22,345.1234 ; run; 例中,最好就是只用INFORMAT語句,不要用ATTRIB,這樣可以少記些東西。,永久性與臨時性聯(lián)系,DATA步規(guī)定的輸入格式是永久聯(lián)系的; PROC步規(guī)定的輸入格式是臨時聯(lián)系的。,輸入格式類型,數(shù)值輸入格式; 字符輸入格式; 日期時間輸入格式; 豎式二進制數(shù)輸入格式; 使用FORMAT過程自定義的輸入格式。,w.d輸入格式,讀入標準數(shù)值數(shù)據(jù)。 例13.6 INPUT語句對變量使用列指針控制和w.d的輸入格式。 INPUT X 8.2; INPUT X 1-10
5、 .2; W.D輸入格式把一個點(.)作為缺失值。 用W.D輸入格式時,數(shù)值域尾部的空白不表示0,用BZ.輸入格式可以把尾部空白讀為0.,數(shù)值變量輸入格式,COMMAw.d 輸入格式,COMMAw.d輸入格式讀入包含字符的數(shù)值。 數(shù)值數(shù)據(jù)內(nèi)可能包含的字符有: 逗號; 空格; $; %; 破折號; 圓括號等。 例13.8 讀入帶千分號的數(shù)據(jù)。 data a; input x comma12.2; cards; 12,522.2315 ; run;,例13.10 數(shù)值變量輸入格式應用舉例。 data ; informat x 8.2; x=12345.1234; put x=; run; data
6、 a; x=12345.1234; informat x 12.4; format x 8.2; put x=; run; data a; input x; informat x comma12.4; cards; 12,345.1234 22,345.1234 ; run;,結果顯示x=12345.1234. 結果顯示x=12345.12.,$w.輸入格式,讀入標準字符數(shù)據(jù)。 在讀入字符值之前,$w.輸入格式清除字符值開頭的空格。 $w.輸入格式把一個點(.)轉換為空格,因為它把一個點看作缺失值。 例13.11 讀入數(shù)據(jù)時,清除數(shù)據(jù)開頭空格并將(.)轉換為缺失值。 data; input n
7、ame $5.; cards; xyz . uvw ; options nocenter; proc print noobs; run;,輸出結果: xyz uvw,字符變量輸入格式,$CHARw輸入格式,讀含有空格的字符數(shù)據(jù)。$CHARw.輸入格式除了不清除字符值開頭的空作格外,它等同于標準的$w.輸入格式。 例13.12 保留開頭和結尾的空格。 data; input name $char10.; cards; xyz . uvw ; options nocenter; proc print noobs; run; INPUT語句采取自由格式輸入時,INFORMAT或ATTRIB語句中不能
8、使用$CHAR.輸入格式,因為SAS把空格看作數(shù)據(jù)行中數(shù)值間的分隔符。,輸出結果: xyz . uvw,例13.13 不能放放在一起使用的語句。 informat x $char12.; input x y z; 例13.14直接賦值為字符型變量。 data a; x1=st92; x2=st92; informat x $8. ; x3=12,345.1234; run;,輸出格式,輸出格式是SAS系統(tǒng)用來輸出數(shù)據(jù)值的一個指令。 輸出格式形式 FORMAT . 選項說明:,通用規(guī)則: 所有輸出格式必須包含一個點(.)作為名字的一部分; 省略W和D的值時,使用系統(tǒng)的缺省值; 無論怎樣規(guī)定輸出格
9、式中的小數(shù)位,輸出格式都不會影響存貯的數(shù)據(jù)值; 規(guī)定的輸出格式寬度太窄小時,對字符格式截去右邊的字符,對數(shù)值格式轉換為BESTw.的格式; 使用一個不協(xié)調(diào)的輸出格式時,SAS系統(tǒng)首先試著使用其它類型的類似格式。如果行不通,將輸出一個錯誤信息在SAS日志。,輸出格式使用方法,PUT語句; PUT函數(shù); DATA步中用FORMAT或ATTRIB語句; PROC步中用FORMAT或ATTRIB語句。,PUT語句,例13.15 PUT語句中使用輸出格式。 data; x=1145.32; put x dollar10.2; run; 結果為$1,145.32。輸出格式帶千分號和美元號。,PUT函數(shù),P
10、UT函數(shù)對于將數(shù)值轉換為字符,或者改變變量的字符輸出格式是很有用的。 例13.16 PUT函數(shù)中使用輸入格式。 data; cc=16; cchex=put(cc,hex3.); put cc hex3.; run; 結果為010. 例中,轉換數(shù)值變量cc的值為三個字符的十六進制表達式。 data; cc=16; cc=put(cc,3.); run; 例中,將數(shù)值CC轉換為字符值。,DATA步中用FORMAT或ATTRIB語句,例13.17 DATA步中用FORMAT或ATTRIB語句。 format sales1-sales12 comma10.2; 例中,F(xiàn)ORMAT語句對變量sales
11、1至sales12規(guī)定輸出格式COMMAw.d. attrib sales1-sales12 format=comma10.2;例中,ATTRIB語句對變量sales1至sales12規(guī)定輸出格式COMMAw.d.,輸出格式類型,數(shù)值輸出格式; 字符輸出格式; 日期時間輸出格式; 使用FORMAT過程創(chuàng)建的自定義輸出格式。,w.d輸出格式,輸出標準數(shù)值數(shù)據(jù)。對超出輸出格式寬度的數(shù)值進行四舍五入。數(shù)值過大時,使用BESTw.輸出。 例13.18 w.d輸出格式應用。 data a; x=23.45; put x 6.3; run; 結果是23.450。 例13.19 使用列輸出法等價于使用指針控
12、制和w.d的格式。 put x 1-8 .2; put 1 x 8.2; 例中,兩個語句等價。,數(shù)值變量輸出格式,BESTw.格式,沒有對變量規(guī)定輸出格式時,使用BEST.的格式。SAS在規(guī)定的寬度列數(shù)中選擇能夠給出該值最多信息的表示法作為輸出格式。SAS仍存貯原來的完整數(shù)值。,例13.20 用不同的BESTw.形式輸出時,顯示結果不一樣,但在SAS存貯的都是原來的完整數(shù)值。 data; x=12570000; put 10 x best6.; run; 輸出值為1.26E6。正確地輸出這個值需要8列,使用E表示法把這個值壓縮為6列. data; x=12570000; put 10 x be
13、st3.; run; 輸出值為1E6. data; x=12570000; put 10 x best2.; run; 輸出值為*.,Ew.輸出格式,例13.22 用科學記數(shù)法表示輸出數(shù)值。 data; x=1257; put 10 x e10.; run; 輸出值為1.257E+03,共占9列。,輸入輸出控制流程,輸入-存儲-輸出控制流程,$w.輸出格式,$w.是最常用的字符數(shù)據(jù)輸出格,w值給出輸出字符值的列數(shù)。 例13.24 $w.和列輸出格式產(chǎn)生同樣效果。 data ; name=ABC; put 10 name $3.; put name $10-12; run; 例中,都輸出值為AB
14、C.,字符變量輸出格式,日期時間存貯方式,SAS日期值存貯方式 SAS系統(tǒng)存貯日期值為1960年1月1日到這個日期之間的天數(shù)。 日期存貯方式舉例,例13.25 表中天數(shù)的計算程序。 data; date=mdy(1,1,1960); put date 8.; date=mdy(3,3,1962); put date 8.; date=mdy(8,4,1985); put date 8.; date=mdy(10,1,2002); put date 8.; date=mdy(7,4,1776); put date 8.; run;,SAS日期時間值存貯方式,SAS存貯時間值從0時開始以秒記數(shù)。
15、日期時間值存貯方式舉例,例13.26 表中秒數(shù)的計算程序。 data; hms=hms (21,50,51); put hms=; x=21*60*60+50*60+51; put x=; date=mdy(10,1,2002); put date=; dhms=dhms (date,21,50,51); put dhms=; y=date*24*3600+x; put y=; run;,日期時間輸入格式,應用舉例,例13 27 使用SAS日期時間的輸入格式。 data a; input date mmddyy10.; cards; 10-01-2002 10/01/2002 ; run;,日
16、期時間輸出格式,假定日期時間值為2003年3月27日12點5分5.49秒, 星期四,為2003年的第86天,第1季度,所在周的第5天。,例13.28 使用SAS日期時間的輸出格式。 data a; input date mmddyy10.; format date yymmdd10.; put date=; cards; 10-01-2002 10/01/2002 ; run; data a; input date mmddyy10.; format date date9.; put date=; cards; 10-01-2002 10/01/2002 ; run;,data ; x=put
17、(today(), date7.);put x; y=put(today(),8.0); put y; z=today(); put z; u=put(15260, yymmdd10.);put u; v=put(15260, date9.);put v; run; 顯示結果: 19SEP02 15602 15602 2001-10-12 12OCT2001,data; x=13807; format x yymmdd10.; put x=; run; 顯示結果: x=1997-10-20 data; date=11oct2001d; put date=; format date yymmdd
18、10.; run; 顯示結果: date=2001-10-11,缺失值處理,讀入含缺失值的數(shù)據(jù) 可以表示缺失值的字符有: 空格; 點; MISSING語句規(guī)定的字符。 例13.29 空格表示缺失值的數(shù)據(jù)適合列方式讀入。 data a; input name $1-5 test1 7-8 test2 10-11; cards; ann 9296 susan 84 bill 81 ; run; 例中,SUSAN第一次測驗缺席,BIL第二次測驗缺席,空格表示缺失值。,例13.30 點表示缺失值的數(shù)據(jù)適合自由方式讀入。 data b; input name $ test1 test2 ; cards;
19、 ann 9296 susan . 84 bill 81 . ; run; 例13.31 讀入由MISSING語句規(guī)定缺失值的數(shù)據(jù)。 data c; Missing A; input name $ test1 test2 ; cards; ann 9296 susan A 84 bill 81 A ; run;,系統(tǒng)產(chǎn)生的缺失值,SAS系統(tǒng)產(chǎn)生缺失值的情況有三種: 算術運算; 非法運算符; 非法字符轉換為數(shù)值。,第14章 宏編程技術,清華大學經(jīng)管學院 朱世武 Z Resdat樣本數(shù)據(jù): SAS論壇: ,本章內(nèi)容包括:,概述; 宏變量; 宏; 宏參數(shù); 宏表達式; 宏引用; 宏工具中的輸入輸出;
20、 數(shù)據(jù)步接口程序; 宏程序語句和宏函數(shù)。,概述,宏工具是一種可以用來擴展SAS功能,減少普通工作文本輸入量的SAS工具。宏工具可以給一段文本或SAS程序命名,并通過引用這個名稱來使用這段程序或文本。,宏工具的功能非常強大,使用宏工具來完成以下任務。 使用宏變量實現(xiàn)文本替代; 使用宏產(chǎn)生程序語句; 使用宏循環(huán)及條件判斷語句完成程序交互。,宏變量,定義宏變量 用宏程序語句%LET來定義宏變量。 %let DSN=ResDat.class; 例中,DSN是宏變量名,ResDat.class為宏變量DSN的值。,引用宏變量,在宏變量前加,例14.2 宏處理器只能在雙引號內(nèi)進行替代。 %let a=ja
21、nuary; data; put This is the time series plot for 例中,在引號內(nèi)引用宏變量的值時必須用雙引號。因為宏處理器只能在雙引號內(nèi)進行替代。,606 %let a=january; 607 data; 608 put This is the time series plot for This is the time series plot for january NOTE: 數(shù)據(jù)集 WORK.DATA1 有 1 個觀測和 0 個變量。 NOTE: “DATA 語句”所用時間(總處理時間): 實際時間 0.01 秒 CPU 時間 0.01 秒,例14.3
22、多次引用宏變量。 %let a=ResDat.class; data male; set ,例14.4 改變宏變量的值。 %let m=2000; %let n=1; data a; set ResDat.stk000002; where year(date)= 例中,改變宏變量的值,如:%LET N=2,3,4,5,.,12可以分別得到12個月的時序圖。不過,更好的方法是用宏循環(huán)來實現(xiàn)這里的要求。,例14.5 宏變量的值為一段完整的SAS程序段。 %let plot=%str( proc gplot data=a; plot clpr*date=1; symbol1 v=star i=joi
23、n r=1 c=red; run; ); 例中,必須使用%STR函數(shù)圍住宏變量的值,在以后的程序中可以用)。,例14.6 宏變量的嵌套引用。 %let m=2000; %let n=1; %let xvar=date; %let yvar=clpr; %let plot=%str( proc gplot data=a; title2 ,如何隔開宏變量引用和文本,在混合使用宏變量引用和文本的時候,會遇到宏變量后面緊跟著文本的情況。 如定義宏變量name后,當使用 %PUT ,顯示宏變量值,顯示宏變量的最簡單方法是使用%put語句,它將文本輸出到SAS的日志窗口。 語句格式: %PUT ; 例14
24、.8 顯示宏變量的值。 data _null_; %let a=first; %let b=macro variable; %put LOG窗口顯示: first ! macro variable !,間接引用宏變量,對一系列的宏變量引用,如data1,data2, data3, 這一系列中部分文本是固定的名稱,而另一部分是變化的數(shù)字。這時就可以采取間接引用方式。 例14.9 間接引用宏變量。 %let data1=x; %let data2=y; %let data3=z; %macro test; %do i=1 %to 3 ; %put %test,宏變量范圍,宏變量以使用范圍分為全局宏
25、變量和局部宏變量 全局變量可以在SAS對話運行期間使用并且可以在程序的任何地方引用 局部變量則只能在創(chuàng)建該局部變量的宏中使用,在這個宏之外,這個局部變量就沒有任何意義。,宏,宏是被編輯過的可以從SAS程序中調(diào)用的程序。同宏變量一樣,一般可以使用宏來產(chǎn)生文本。 定義宏的格式: %Macro MAC; 文本; %mend MAC;,例14.10 定義宏plot。 %macro plot; proc gplot data=ResDat.stk000002; title2 收盤價時序圖; plot clpr*date=1; symbol1 v=star i=join r=1 c=red; %mend
26、plot;,調(diào)用一個宏,用一個百分號(%)加宏名字就可以調(diào)用該宏。 例14.11 定義并調(diào)用宏plot。 %macro plot; proc gplot data=ResDat.stk000002; title2 收盤價時序圖; plot clpr*date=1; symbol1 v=star i=join r=1 c=red; %mend plot; /*以上定義宏plot*/ %plot; /*調(diào)用宏*/ run;,改變宏內(nèi)宏變量的值,例14.12 改變宏內(nèi)宏變量的值,分以下幾步完成。 定義宏plot: %macro plot; proc gplot data=ResDat.,定義宏變量:
27、 %let dat=stk000002; %let pr=收盤價; %let price=clpr; 調(diào)用宏plot: %plot; 改變宏變量的值: %let dat=stk000002; %let pr=最高價; %let price=hipr; 再次調(diào)用宏plot: %plot; run; 以上各段程序可以連在一起運行。,宏參數(shù),宏變量和宏結合在一起是一種強有力的編程方法。但應用起來并不十分方便。最常用的是在宏中使用宏參數(shù)。 宏參數(shù)是一種特殊的宏變量,是定義在宏%MACRO語句內(nèi)的宏變量。,例14.13 創(chuàng)建宏參數(shù)。 %macro plot(dat,pr,price); proc gpl
28、ot data=ResDat. 例中,在%MACRO語句括號內(nèi)定義的宏變量DAT, PR和PRICE稱為宏參數(shù)。,例14.14 通過給宏參數(shù)賦值來調(diào)用宏。 %plot(stk000002, 收盤價,clpr); 例中,運行時,宏處理器把第一個值(stk000002)賦給第一個宏參數(shù)DAT,第二個值(收盤價)賦給第二個宏變量PR,以此類推。,使用宏參數(shù)的優(yōu)點: 可以少寫幾個%let語句; 保證該宏參數(shù)變量在宏之外的程序部分不被引用; 調(diào)用宏時并不需要知道這些宏參數(shù)的名字,只要知道相應的取值。,宏參數(shù)賦值,例14.16 創(chuàng)建宏參數(shù)時直接賦值。 %macro plot(dat=stk000002,
29、pr=收盤價,price=clpr); proc gplot data=ResDat.,例14.17 運行宏時賦值。 %macro plot(dat,pr,price); proc gplot data=ResDat.,宏調(diào)用宏,產(chǎn)生數(shù)據(jù)集宏:. %macro create; data temp; set ResDat.,宏調(diào)用宏: %macro analyze(dat, year, pr,price,year1); %create; /*產(chǎn)生數(shù)據(jù)集TEMP*/ %plot; /*作圖*/ %mend analyze; 運行宏: %analyze(stk000002, 2000, 收盤價,clpr,2000); run;,條件表達式,例14.19 用條件表達式%if-%then定義宏。 %macro analyze(getdata, dat, year, pr,price,year1); %if ,生成重復文本,例14.22 定義生成重復文本宏。 %macro names(name, number); %do n=1 %to ,620 %end; 621 %mend names; 622 data %names(dsn, 5); 623 run; NOTE: 數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025山西忻州保德縣社區(qū)工作者招(選)聘36人備考題庫附答案
- 裝訂工崗前競爭分析考核試卷含答案
- 電器附件制造工崗前安全技能測試考核試卷含答案
- 水聲換能器裝配工安全教育模擬考核試卷含答案
- 2024年海南省特崗教師招聘考試真題題庫附答案
- 2024年璧山縣事業(yè)單位聯(lián)考招聘考試歷年真題附答案
- 2024年湖南涉外經(jīng)濟學院輔導員考試筆試真題匯編附答案
- 2025年企業(yè)企業(yè)內(nèi)部審計制度手冊
- 2024年莎車縣幼兒園教師招教考試備考題庫附答案
- 2024年鄭州信息工程職業(yè)學院輔導員考試筆試題庫附答案
- GB/T 46755-2025智能紡織產(chǎn)品通用技術要求
- 2026北京市中央廣播電視總臺招聘124人參考題庫附答案
- 十五五規(guī)劃綱要解讀:循環(huán)經(jīng)濟模式推廣
- 2026年山西警官職業(yè)學院單招綜合素質(zhì)筆試備考題庫帶答案解析
- 2026年農(nóng)夫山泉-AI-面試題目及答案
- 2026凱翼汽車全球校園招聘(公共基礎知識)綜合能力測試題附答案
- 山東省威海市環(huán)翠區(qū)2024-2025學年一年級上學期1月期末數(shù)學試題
- 2025年手術室護理實踐指南知識考核試題及答案
- 外貿(mào)公司采購專員績效考核表
- 彩禮分期合同范本
- 胸腺瘤伴重癥肌無力課件
評論
0/150
提交評論