【正文】
失值,那該如何處理解決呢?在 SAS 系統(tǒng)中有一條 RETAIN 語(yǔ)句專門用于解決這一問(wèn)題。 第一種使用格式表示用 INPUT語(yǔ)句或賦值語(yǔ)句創(chuàng)建的所有變量從 DATA步的這次執(zhí)行到下一次重復(fù)時(shí)被保留。為了便于理解,我們將程序編寫如下: Data MAV 。 Do i = 1 to day 。 Card 。 DO- END 循環(huán)的作用是用 T 累加器求最近三日收盤價(jià)之和, T 變量每次求和前要初始化為 0。 Retain 。 Card 。 Input date date7. close 。 SELECT 語(yǔ)句開始一個(gè) SELECT 組, SELECT 組包括一些 WHEN語(yǔ)句,當(dāng)一個(gè)設(shè)定的條件為真時(shí),執(zhí)行對(duì)應(yīng)的 WHEN 語(yǔ)句給出的一些 SAS 語(yǔ)句。即使后面 WHEN語(yǔ)句也滿足條件,也不再執(zhí)行了。 When(aver=90) grade=”A” 。 圖 用 SELECT— WHEN 組產(chǎn)生的數(shù)據(jù)集結(jié)果 81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系統(tǒng)和數(shù)據(jù)分析 電子 商務(wù)系列 上海財(cái)經(jīng)大學(xué)經(jīng)濟(jì)信息管理系 IS/SHUFE Created by Page 16 of 20 三、 實(shí)現(xiàn)分支( IF 語(yǔ)句) 在 SAS 語(yǔ)言中, IF 語(yǔ)句有兩種使用格式: ? IF語(yǔ)句的格式之一: IF 條件表達(dá)式 THEN SAS 語(yǔ)句 。假設(shè), 人的標(biāo)準(zhǔn)體重計(jì)算公式 .:男性之標(biāo)準(zhǔn)體重(千克)=身長(zhǎng)(厘米)-100,女性之標(biāo)準(zhǔn)體重(千克)=身長(zhǎng)(厘米)-102。 else fatness=n。 程序如下: Libname Study “d:\sasdata\mydir” 。 GOTO 語(yǔ)句的基本使用格式如下: Data 數(shù)據(jù)集 。當(dāng)然 GOTO 語(yǔ)句的功能是可以通過(guò)其他結(jié)構(gòu)化控制轉(zhuǎn)移語(yǔ)句替代實(shí)現(xiàn)。 retain countif 0 acctest 0 。 程序中的 ok: acctest=acctest+test 累加語(yǔ)句,如果條件不成立,執(zhí)行完 countif=countif+1計(jì)數(shù)語(yǔ)句后,也要執(zhí)行此累加語(yǔ)句。 LINK 語(yǔ)句標(biāo)號(hào) 。 LINK— RETURN結(jié)構(gòu)從程序執(zhí)行的本質(zhì)看,是調(diào)用子程序和子程序返回。有 LINK 語(yǔ)句而沒有 RETURN 語(yǔ)句的數(shù)據(jù)步,并不 會(huì)發(fā)生錯(cuò)誤,而是執(zhí)行到最后 DATA 結(jié)束處,用隱含的 RETURN 語(yǔ)句返回到LINK 后的那條語(yǔ)句。 39。 test=test3 。B39。 Run 。另外,程序中的第二個(gè) Return 語(yǔ)句,也就是子程序的返回語(yǔ)句在本程序中是可以省略的,因?yàn)檫@個(gè) Return 語(yǔ)句的再下面正好就是 DATA步的結(jié)束處,它也有一個(gè)隱含的Return 語(yǔ)句可供子程序返回。 Return 。A39。 link recode 。 Set 。事實(shí)上,每一個(gè) DATA步的結(jié)束處都包含一個(gè)隱含的 RETURN。 RETURN 。 LINK 語(yǔ)句的 基本使用格式如下: Data 數(shù)據(jù)集 。 Run 。 Data 。 Run 。 GOTO語(yǔ)句的實(shí)現(xiàn),是通過(guò) GOTO語(yǔ)句中和目標(biāo)語(yǔ)句前使用相同的語(yǔ)句標(biāo)號(hào)才識(shí)別目標(biāo)和實(shí)現(xiàn)轉(zhuǎn)移的。 2. 使用 IF 語(yǔ)句 當(dāng)我們?cè)趧?chuàng)建 SAS 數(shù)據(jù)集時(shí)使用 IF 語(yǔ)句的格式之二,常用來(lái)創(chuàng)建滿足 IF 條件表達(dá)式的新數(shù)據(jù)集。 else fatness=n。另外, THEN 和 ELSE 后還可以跟 DO 語(yǔ)句, 格式見 DO 語(yǔ)句的程序格式之一。 Run 。 aver = (test1+test2+test3)/3 。 如果沒有 SELECT 的表達(dá)式, when 表達(dá)式中一定要含有比較操作符,先求出第一個(gè) when表達(dá)式的真假結(jié)果,如果為真,執(zhí)行這個(gè) WHEN 后面的 SAS 語(yǔ)句,如果為假,執(zhí)行下一條WHEN 語(yǔ)句或 OTHERWISE 語(yǔ)句。本質(zhì)上是一種多路分支結(jié)構(gòu),當(dāng)然可以用 IF— THEN 結(jié)構(gòu)的多層嵌套來(lái)實(shí)現(xiàn),但當(dāng)分支較多時(shí), SELECT 語(yǔ)句會(huì)很方便,結(jié)構(gòu)也很清楚。 當(dāng)然,以上的程序只是為了說(shuō)明循環(huán) DO 組和 RETAIN 語(yǔ)句的使用,在實(shí)際應(yīng)用中,求移動(dòng)平均線最簡(jiǎn)單的方法是采用求滯后值 LAGn 函數(shù)。 moveaver=t/day 。 Array a{5} 。第一條 RETAIN語(yǔ)句的目的是設(shè)置常量 day=3,下標(biāo)變量 i的初值為 1,第二條 RETAIN 語(yǔ)句的主要目的是為了保留存放收盤價(jià)數(shù)據(jù)的數(shù)組 a{i},我們?yōu)榱耸勾蠹颐靼赘鱾€(gè)變量的變化過(guò)程, RETAIN 語(yǔ)句后未專門指定數(shù)組 a{i},而是保留用 INPUT語(yǔ)句或賦值語(yǔ)句創(chuàng)建的所有變量。 End 。 If _n_= day Then do 。所謂 3 日移動(dòng)平均價(jià),指最近 3 日收盤價(jià)的平均值,即當(dāng)天、昨天和前天收盤價(jià)的平均值。 ? Retain T1 T2 T3 (100 ) 。 圖 循環(huán) DO 組中使用數(shù)組來(lái)產(chǎn)生數(shù)據(jù)集 81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系統(tǒng)和數(shù)據(jù)分析 電子 商務(wù)系列 上海財(cái)經(jīng)大學(xué)經(jīng)濟(jì)信息管理系 IS/SHUFE Created by Page 11 of 20 4. 用循環(huán) DO 組和 RETAIN 語(yǔ)句產(chǎn)生數(shù)據(jù)集 由已有數(shù)據(jù)集產(chǎn)生具有新增變量的新數(shù)據(jù)集時(shí),通常新增變量值是本條觀測(cè)原變量值和循環(huán)變量值的函數(shù)值。 1 2 3 4 5 6 Proc print data= DoArray。為簡(jiǎn)便起見,假設(shè)新增變量 Ti=∑ Xji。 ? Array x{*} T1 T2 T3 。 程序運(yùn)行結(jié)果如圖 所示。第一次順序執(zhí)行產(chǎn)生Seed、 I、 X X2 四個(gè)變量, OUTPUT 輸出后,遇到 END語(yǔ)句回到 DO語(yǔ)句,產(chǎn)生 I、 XX2 變量的第二次值, Seed 變量因?yàn)闆]有遇到 DATA語(yǔ)句,繼續(xù)保持原來(lái)值, DO- END 循環(huán)結(jié)束后, DATA 步也就結(jié)束了。 X2=ranuni(seed ) 。 DO WHILE 和 DO UNTIL語(yǔ)句中的表達(dá)式是用括號(hào)括起來(lái)的。 一些 SAS語(yǔ)句 。 確是要在數(shù)據(jù)集中新增 TAX 變量,應(yīng)選擇 File/Save as/Save data set as 命 令保存退出。 圖 去掉 AGE 變量 81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系統(tǒng)和數(shù)據(jù)分析 電子 商務(wù)系列 上海財(cái)經(jīng)大學(xué)經(jīng)濟(jì)信息管理系 IS/SHUFE Created by Page 4 of 20 三、 選擇 View/Assign formats/Format 命令重新定義變量的輸出格式 數(shù)據(jù)集在初始創(chuàng)建時(shí),我們只考慮了輸入格式,現(xiàn)在在屏幕的窗口中顯示的數(shù)據(jù)格式是一種系統(tǒng)默認(rèn)的輸出格式,可 能不符合用戶的要求,例如 BDATE 出生年日期變量,顯示的是 SAS 系統(tǒng)內(nèi)部的日期存儲(chǔ)值,我們將它改成 。需要注意, OBS 編號(hào)是記錄輸入的順序號(hào),而不是當(dāng)前記錄的邏輯順序編號(hào)。我們?cè)谶@里以編輯數(shù)據(jù)集 ,簡(jiǎn)單介紹幾種最常用的編輯操作。81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系統(tǒng)和數(shù)據(jù)分析 電子 商務(wù)系列 上海財(cái)經(jīng)大學(xué)經(jīng)濟(jì)信息管理系 IS/SHUFE Created by Page 1 of 20 第十四課 使用 FSVIEW 過(guò)程編輯數(shù)據(jù)集 我們前面主要用 SAS的程序方法來(lái)編輯 SAS數(shù)據(jù)集。因?yàn)?FSVIEW在每一屏顯示盡可能多的觀測(cè),是一種屏編輯;而 FSEDIT 在每一屏只顯示一條觀測(cè),是一種行編輯。另外一種方法是,選擇 Edit/Delete 命令后,再輸入