官术网_书友最值得收藏!

4.2 數(shù)據(jù)步讀DAT格式文件建立數(shù)據(jù)集

以擴(kuò)展名“.dat”格式存儲(chǔ)的外部文件,稱為DAT格式文件。這種文件的讀取要根據(jù)數(shù)據(jù)文件的記錄數(shù)據(jù)方式而定,數(shù)據(jù)之間有分隔符和無(wú)分隔符在讀取數(shù)據(jù)時(shí)的方式是不一樣的。雖然SAS的圖形化可以建立數(shù)據(jù)集,但它對(duì)需要用函數(shù)處理的數(shù)據(jù)變量卻不能,所以真正經(jīng)常用來(lái)處理數(shù)據(jù)文件的方式還是要通過(guò)編寫(xiě)SAS程序來(lái)完成。

4.2.1 DAT格式文件建立數(shù)據(jù)集

DAT格式文件和TXT文本文件性質(zhì)一樣,只是DAT格式文件實(shí)際開(kāi)發(fā)中更經(jīng)常遇到,這類文件存儲(chǔ)的好處是二進(jìn)制文件數(shù)據(jù),它與TXT格式的區(qū)別在于TXT格式是字符文件。

1)數(shù)據(jù)之間沒(méi)有分隔符的DAT格式文件,按行存儲(chǔ)的每條記錄之間無(wú)分隔符號(hào),這類文件書(shū)寫(xiě)形式如圖4-14所示。這類文件需要通過(guò)絕對(duì)指針來(lái)讀取文件數(shù)據(jù),絕對(duì)指針@n中的n為數(shù)據(jù)文件中列變量的開(kāi)始位置,為正整數(shù)。

圖4-14 數(shù)據(jù)之間無(wú)分隔符文件

【注意】文件中記錄長(zhǎng)度超過(guò)256字節(jié)要用LRECL=指定文件長(zhǎng)度,否則數(shù)據(jù)文件讀取會(huì)報(bào)錯(cuò)。

【例4.31】留學(xué)人員信息數(shù)據(jù)文件,數(shù)據(jù)存儲(chǔ)列之間無(wú)分隔符文件,存儲(chǔ)路徑為“d:\sastest\yxy\yj.dat”,請(qǐng)把此文件讀取出來(lái),建立數(shù)據(jù)集abroad,并存儲(chǔ)到“d:\sastest\yxy”目錄下。

【程序解讀】

程序通過(guò)dsd指定分隔符明顯,missover指定缺失值不覆蓋,外部文件記錄長(zhǎng)度超過(guò)256字節(jié),必須用lrecl=選項(xiàng)指明記錄長(zhǎng)度。

2)實(shí)際應(yīng)用中經(jīng)常遇到DAT數(shù)據(jù)文件數(shù)據(jù)之間以某一分隔符號(hào)分隔,這類文件各列之間以分隔符號(hào)隔開(kāi),具體根據(jù)需求選擇不同的分隔符號(hào),分隔符號(hào)如“|”“@”“|@|”等,這類文件的書(shū)寫(xiě)形式如圖4-15所示。

圖4-15 數(shù)據(jù)之間以“|”分隔符分隔列數(shù)據(jù)文件

有分隔符號(hào)的數(shù)據(jù)文件和無(wú)分隔符號(hào)的數(shù)據(jù)文件在讀取方式上是不同的,需要根據(jù)分隔符號(hào)讀取。

【例4.32】郵政編碼數(shù)據(jù),數(shù)據(jù)之間以“|”符號(hào)分隔,文件存儲(chǔ)路徑為“d:\sastest\yxy\zone.dat”,請(qǐng)建立數(shù)據(jù)集zone,并存儲(chǔ)到“d:\sastest\yxy”目錄下。

【程序解讀】

【例4.31】與【例4.32】?jī)蓚€(gè)實(shí)例對(duì)比可以看出無(wú)分隔符文件讀取和有分隔符文件讀取差異很大,讀取的方式不一樣,對(duì)比可以看出有分隔符文件不能用絕對(duì)指針@n方式讀取文件,只能通過(guò)列變量名并定義變量數(shù)據(jù)類型的方式讀取,并加入選項(xiàng)“dlm=”指明數(shù)據(jù)文件的數(shù)據(jù)分隔符號(hào),同時(shí)加格式修飾符。

4.2.2 DAT格式文件特殊分隔符的處理

以特殊分隔符號(hào)來(lái)分隔外部數(shù)據(jù)文件的各列與上面講的兩類數(shù)據(jù)文件讀取方式也不同。特殊分隔符號(hào)如“|@|”,這類分隔符要進(jìn)行轉(zhuǎn)換,因?yàn)椴僮飨到y(tǒng)在把這些分隔符讀取時(shí)有和它一樣的編碼,這類文件書(shū)寫(xiě)形式如圖4-16所示。

圖4-16 數(shù)據(jù)之間以“|@|”分隔符分隔列數(shù)據(jù)文件

【例4.33】北京地區(qū)畢業(yè)生信息數(shù)據(jù),數(shù)據(jù)文件中的數(shù)據(jù)之間以特殊分隔符號(hào)“|@|”分隔,文件存儲(chǔ)路徑為“d:\sastest\yxy\bjperson.dat”,請(qǐng)把此文件讀取出來(lái),建立數(shù)據(jù)集bjperson,并存儲(chǔ)到“d:\sastest\yxy”目錄下。

【注意】特殊分隔符文件讀取時(shí)需要先對(duì)特殊分隔符進(jìn)行處理,才能讀取數(shù)據(jù),此處用到了tranwrd函數(shù)轉(zhuǎn)換特殊分隔符為另一分隔符。

【程序解讀】

特殊符號(hào)“|@|”先通過(guò)函數(shù)tranwrd轉(zhuǎn)換,以區(qū)別操作系統(tǒng)分隔符號(hào),防止分隔符混淆。

說(shuō)明:DATA步在讀入數(shù)據(jù)時(shí)先把讀入的行記錄放到輸入緩沖區(qū),緩沖區(qū)中的數(shù)據(jù)可以賦值給SAS系統(tǒng)自帶的內(nèi)部變量_INFILE_中。

4.2.3 DAT格式文件特殊需求的字段處理

對(duì)于DAT格式的文件,在建立數(shù)據(jù)集時(shí),為滿足業(yè)務(wù)需求,一些特殊字段要通過(guò)在數(shù)據(jù)步使用SAS的內(nèi)部函數(shù)來(lái)進(jìn)行處理,這樣生成的數(shù)據(jù)集才是符合業(yè)務(wù)需求的有效的數(shù)據(jù)集。為過(guò)程步進(jìn)行統(tǒng)計(jì)分析或SAS/EM進(jìn)行數(shù)據(jù)挖掘提供符合業(yè)務(wù)需求的正確的數(shù)據(jù)。

存儲(chǔ)的文件字段中包含特殊符號(hào),對(duì)這類文件的列變量,可以通過(guò)SAS內(nèi)部的函數(shù)處理。這類文件的存儲(chǔ)形式如圖4-17所示,可以看到電話號(hào)碼列數(shù)據(jù)“010#67565432”中區(qū)號(hào)和號(hào)碼用“#”號(hào)分隔。現(xiàn)實(shí)中還有很多需要對(duì)文件的變量數(shù)據(jù)進(jìn)行處理,但處理方式和思路都是一樣的。

圖4-17 列變量數(shù)據(jù)包含分隔符數(shù)據(jù)文件

【例4.34】通訊錄數(shù)據(jù)文件,文件存儲(chǔ)路徑為“d:\sastest\yxy\phone.dat”,請(qǐng)把此文件中的電話號(hào)碼列取出區(qū)號(hào),其中電話號(hào)碼區(qū)號(hào)與所取號(hào)碼用“#”分隔,建立數(shù)據(jù)集名字為phone,并存儲(chǔ)到“d:\sastest\yxy”目錄下。

【程序解讀】

phone變量中包含區(qū)號(hào)和電話號(hào)碼,以“#”號(hào)分隔,通過(guò)scan函數(shù)取出區(qū)號(hào)。通過(guò)這個(gè)實(shí)例可以看出數(shù)據(jù)步里可以根據(jù)業(yè)務(wù)需求添加新的變量,通過(guò)SAS函數(shù)進(jìn)行處理。無(wú)論是做統(tǒng)計(jì)分析,還是做數(shù)據(jù)挖掘,還是用SAS的其他模塊對(duì)數(shù)據(jù)集進(jìn)行處理分析,都需要數(shù)據(jù)步進(jìn)行數(shù)據(jù)處理,數(shù)據(jù)步的核心地位在這里顯示出來(lái)了,數(shù)據(jù)處理的優(yōu)劣決定著分析結(jié)果是否有效。不合理的數(shù)據(jù)處理會(huì)影響分析,對(duì)于很重要的商業(yè)分析,錯(cuò)誤分析產(chǎn)生的錯(cuò)誤導(dǎo)向?qū)?huì)對(duì)商業(yè)活動(dòng)造成可能無(wú)法估量的損失。

主站蜘蛛池模板: 高台县| 娱乐| 桑植县| 莱西市| 花垣县| 华蓥市| 全南县| 睢宁县| 沭阳县| 土默特左旗| 清涧县| 大关县| 鲁甸县| 抚顺县| 子洲县| 滦南县| 邹平县| 神池县| 自治县| 拜泉县| 丹棱县| 泰宁县| 腾冲县| 五台县| 德江县| 张家港市| 江北区| 宾川县| 呼图壁县| 黎川县| 荆门市| 犍为县| 塔城市| 邹城市| 老河口市| 凉山| 曲水县| 得荣县| 比如县| 巴彦淖尔市| 江山市|