【正文】
和 A2,現(xiàn)在改為輸出 Female 和 Male。 ? PRINTMISS——要求輸出所有可能的行和列,即使某個特殊的行和列交叉單元中40dca2807e07d52dcf97c3bcf0947ed9 SAS 系統(tǒng)和數(shù)據(jù)分析 電子商務(wù)系列 上海財經(jīng)大學(xué)經(jīng)濟信息管理系 IS/SHUFE Created by Page 13 of 28 數(shù)據(jù)不存在。對每一個報表單元規(guī)定缺省的輸出格式,如果沒有規(guī)定此選項,缺省值是 。按性別 SEX 和全類 ALL 進行 分類,求平均 年齡 AGE、最大的身高 HEIGH、最小的重量 WEIGHT、平均收入 INCOME 和男女人數(shù)的百分比 PCTN。 value $sexfmt F=39。 。39。 proc tabulate data= formchar=39。 var age heigh weight ine 。 Label ine=39。How to use tabulate statement39。 。定義的 PCT 是一種較常用的百分比格式,其中 low0 表示從最小值 LOW 到不包含 0 的值域, 0high 表示從 0 到最大值的值域,圓括號中的選項 prefix=39。*39。行維的表達式和列維表達式之間用逗號(,)分隔。選項規(guī)定輸出表格的垂直和水平分隔線及 9 個角的字符, /rts=8 圖 數(shù)據(jù)集 SURVEY 的匯總報表 40dca2807e07d52dcf97c3bcf0947ed9 SAS 系統(tǒng)和數(shù)據(jù)分析 電子商務(wù)系列 上海財經(jīng)大學(xué)經(jīng)濟信息管理系 IS/SHUFE Created by Page 15 of 28 選項規(guī)定左右邊界的距離,實際上調(diào)整了分類變量 SEX 列的寬度, rts=8的值越大,SEX 列的寬度越小。 一、 DATA 程序步的三個主要步驟 為了從外部原始數(shù)據(jù)文件得到 SAS 數(shù)據(jù)集, DATA程序步的三個主要步驟為: ? 啟動一個數(shù)據(jù)步,命名將要創(chuàng)建的數(shù)據(jù)集(使用 DATA 語句) ? 確定要讀入的外部文件(使用 INFILE語句) ? 描述如何讀入每一條記錄(使用 INPUT語句) 如果需要在程序中直接嵌入數(shù)據(jù),第二步用 CARDS語句代替 INFILE語句。 Run 。 YN程序返回 D A T A 步的頂部退出 D A T A 步循環(huán),形成 S A S 數(shù)據(jù)集開始下一個 D A T A 步或 P R O C 步D A T A 開始,并確定創(chuàng)建數(shù)據(jù)集名I N P U T 語句將文件下一條記錄讀入 P D V其它語句可以修改 P D V 中的內(nèi)容P D V 中值在 D A T A 步底部被寫入數(shù)據(jù)集I N F I L E 語句確定外部原始文件用 I N F I L E 所涉及到變量建立P D V ,并初始化外部文件下一條記錄是否為空? 圖 執(zhí)行 DATA 步時的內(nèi)部循環(huán)過程 40dca2807e07d52dcf97c3bcf0947ed9 SAS 系統(tǒng)和數(shù)據(jù)分析 電子商務(wù)系列 上海財經(jīng)大學(xué)經(jīng)濟信息管理系 IS/SHUFE Created by Page 17 of 28 二、 讀入模式 確定變量的讀入模式共有四種: ? column 模式 ? formatted 模式 ? list 模式 ? named 模式 我們在這里將介紹三種主要的 column 模式、 formatted 模式和 list 模式。 例如,我們在 NOTEPAD 記事本程序中輸入如圖 所示的內(nèi)容,操作如下: ? 在 Windows 桌面上的開始菜單中選擇 ? 程序 /附件 /記事本 —— 打開 NOTEPAD程序方法 ? 并以 D:\sasdata\mydir目錄下,作為一個我們用來實驗的外部文件 數(shù)據(jù)步D A T A輸入緩沖區(qū) I N F I L E 輸出緩沖區(qū) I N P U T外部數(shù)據(jù)文件 ? S A S 數(shù)據(jù)集123 ? 234 ? ? ?R U N+ 111P D V123+111=234 圖 文件記錄指針、程序指針、觀測指針 40dca2807e07d52dcf97c3bcf0947ed9 SAS 系統(tǒng)和數(shù)據(jù)分析 電子商務(wù)系列 上海財經(jīng)大學(xué)經(jīng)濟信息管理系 IS/SHUFE Created by Page 18 of 28 相應(yīng)地,在 SAS 系統(tǒng)的 PROGRAM EDITOR 中提交下面程序: Data testd1 。 Run 。它有以下兩種格式: 格式一: Input 指針控制 變量 1 輸入格式 |… 。用于一個數(shù)據(jù)行用多條 INPUT語句讀取數(shù)據(jù)。 ( 1) 使用單尾符 例如,對外部文件 INPUT 語句讀取數(shù)據(jù), DATA步程序如下: Data testd2 。 Proc print data=testd2 。 Input code $ 18 sex $ 9 bdate $ 1016 ine $1723 .2 。下表列出了可以同 INPUT 語句一起使用的兩種類型的指針控制。 a=2 。 Run 。 Data testd4 。 Run 。例如, INPUT (test15) ($4.)。當(dāng)外部文件中的輸入值之間至少有一個空格隔開,且丟失值用小數(shù)點表示,字符型數(shù)值長度不超過 8 個字節(jié)(否則需用LENGTH, ATTRIB 或 INFORMAT 語句規(guī)定長度)時,只需在 INPUT 語句中列出要被賦值的變量名即可,而沒有必要知道數(shù)據(jù)占據(jù)哪幾列 。 |…… 。 ”、“ : ”和“ ~”是自由格式輸入方式中的三個格式修飾符。因此不同的數(shù)據(jù)之間最好用較多的空格隔開,這樣字符型輸入值中也就能嵌有較多的空格。 例如,我們在 NOTEPAD 記 事本程序中輸入如圖 所示內(nèi)容,并以 文件名存入到 D:\sasdata\mydir 目錄下,作為第二個我們用來實驗的外部文件。 $15. age address ~ $40. pc 。 圖 數(shù)據(jù)帶引號和空格且以分隔符隔開的外部文件 40dca2807e07d52dcf97c3bcf0947ed9 SAS 系統(tǒng)和數(shù)據(jù)分析 電子商務(wù)系列 上海財經(jīng)大學(xué)經(jīng)濟信息管理系 IS/SHUFE Created by Page 23 of 28 第十九課 SAS 宏功能簡介 SAS 系統(tǒng)提供了強大的宏功能( macro facility) , 通過創(chuàng)建宏變量和宏能方便地完成: ? 重復(fù)分析任務(wù),大大精減了程序量 ? 從系統(tǒng)獲取一些如 SAS 啟動時間、日期、版本號等信息 ? 有條件地執(zhí)行數(shù)據(jù)步和過程步 ? 保持程序的獨立性和移植性,產(chǎn) 生與數(shù)據(jù)無關(guān)的程序 ? 用宏變量在不同數(shù)據(jù)步和過程步之間傳遞數(shù)據(jù) 一、 SAS 宏變量 宏變量(也稱符號變量)屬于 SAS 宏語言的范疇,和數(shù)據(jù)步中的變量概念是不一樣的。 1. 宏變量的定義 定義一個宏變量的最簡單方法是使用宏語句 %LET,它的一般形式如下: %LET 宏變量名 =值 。 圖 用 LIST 模式的格式修飾符讀入外部文件后的 SAS 數(shù)據(jù)集 40dca2807e07d52dcf97c3bcf0947ed9 SAS 系統(tǒng)和數(shù)據(jù)分析 電子商務(wù)系列 上海財經(jīng)大學(xué)經(jīng)濟信息管理系 IS/SHUFE Created by Page 24 of 28 2. 宏變量的引用 為了引用一個宏變量的值,在宏變量前加上一個符號 amp。解決方法是用 %LET 語句創(chuàng)建一個宏變量 DSNAME,該宏變量賦值了一個數(shù)據(jù)集名 SURVEY。dsname 。 Run 。例如,我們可用WHERE 語句來規(guī)定用作打印和分析的一個范圍。 %Let end= ?31dec80?d 。 Where amp。 Title “Display of Data Set amp。提請大家注意宏變量賦值日期常數(shù) ?01jan79?d的這種格式,也可以直接賦日期存40dca2807e07d52dcf97c3bcf0947ed9 SAS 系統(tǒng)和數(shù)據(jù)分析 電子商務(wù)系列 上海財經(jīng)大學(xué)經(jīng)濟信息管理系 IS/SHUFE Created by Page 25 of 28 儲值,如改成 %Let start=6940 和 %Let end=7670。下表列出一些用戶常用的自動宏變量: 自動宏變量 作用 值 SYSDATE 本次 SAS 啟動的日期 如 04AUG97 SYSDAY 本次 SAS 啟動的星期 如 Monday SYSTIME 本次 SAS 啟動的時間 如 11:18 SYSLAST 最新創(chuàng)建的數(shù) 據(jù)集名字 如 SYSDSN 最新創(chuàng)建的數(shù)據(jù)集兩部分名字 如 STUDY SURVEY SYSVER 使用 SAS 軟件的版本 如 SYSSCP 返回用戶主機系統(tǒng)的縮寫 如 WIN 例如,我們修改上面的程序,增加一個小標題,在小標題中引用自動宏變量,程序如下: %Let dsname=survey 。 Proc print data=amp。startbdateamp。dsname” 。sysdate by amp。最簡單的宏就像一個宏變量 一樣工作,但復(fù)雜的宏可以包括分支和循環(huán)等結(jié)構(gòu),能實現(xiàn)許多宏變量不能實現(xiàn)的功能。 %MACRO 語句是每一個宏的開始,同時必須給出這個宏的名字。 SAS 程序中可以包括任意多個宏,且在程序中可以多 次調(diào)用一個宏。程序如下: %MACRO INVOKE( proame, dsname) 。 Title “amp。 %MEND INVOKE 。 Run 。 例如,假設(shè)我們已有兩個宏 CREATE和 PRINT,宏 CREATE可以從參數(shù)宏變量 SETDATA1指定的數(shù)據(jù)集中創(chuàng)建一個新的數(shù)據(jù)集 ,宏 PRINT 可以打印一個參數(shù)宏變量40dca2807e07d52dcf97c3bcf0947ed9 SAS 系統(tǒng)和數(shù)據(jù)分析 電子商務(wù)系列 上海財經(jīng)大學(xué)經(jīng)濟信息管理系 IS/SHUFE Created by Page 27 of 28 SETDATA2 指定的數(shù)據(jù)集。 Data 。M39。 %Macro print(setname2) 。setname2 。 %If %upcase(amp。dsname) 。 當(dāng)規(guī)定參數(shù)宏變量 getdata 的值為大寫字符串 YES或小寫字符串 yes時, %IF 條件成立,宏處理器執(zhí)行 %THEN的分句,即調(diào)用宏 %create(amp。dsname 中的值,其值為字符串。dsname),但打印的數(shù)據(jù)集不同。假定用戶想生成一系列變量名字用于某個 SAS語句,如用在 DATA、 VAR 和 TITLE 語句中。 %Do n=1 %to amp。n %Run 。 Title “%names(Test, 3) generated by macro variable” 。宏程序 %names(Test, 3)同樣可以在 TITLE 語句的雙引號中使用。