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