SAS編程數(shù)據(jù)挖掘?qū)W習(xí)與幫助文檔-5_第1頁
SAS編程數(shù)據(jù)挖掘?qū)W習(xí)與幫助文檔-5_第2頁
SAS編程數(shù)據(jù)挖掘?qū)W習(xí)與幫助文檔-5_第3頁
SAS編程數(shù)據(jù)挖掘?qū)W習(xí)與幫助文檔-5_第4頁
SAS編程數(shù)據(jù)挖掘?qū)W習(xí)與幫助文檔-5_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、SAS編程與數(shù)據(jù)挖掘商業(yè)案例學(xué)習(xí)筆記之十七(2013-08-09 21:29:50) 轉(zhuǎn)載標(biāo)簽: sas數(shù)據(jù)挖掘sqlsas編程join語句分類: SAS編程 繼續(xù)讀書筆記,本次重點sas sql語句,由于sql內(nèi)容多且復(fù)雜,本文只介紹商業(yè)應(yīng)用中常用的并且容易出錯的地方,內(nèi)容包括:單表操作、多表關(guān)聯(lián)、子查詢以及merge和join的區(qū)別1.單表操作eg1:Proc sql outobs=10; *可選項,功能類似于data步中的obs數(shù)據(jù)集選項create table class asSelect name,case when sex eq 'M' then "1&q

2、uot; when sex eq 'F' then "2" else "3"end as sex_tran label="sextrans", *輸出數(shù)據(jù)集中作為sex_trans的中文標(biāo)簽sum(weight-20) as new1 format=16.2, *sas查詢特有的形式sum(height-10) as new2 format=16.2,(calculated new1 - calculated new2) as new, *calculated是sas在sql中特有的語句,用于對產(chǎn)生的新變量再操作Fro

3、m sashelp.class(where=(height between 50 and 70)Group by name,calculated sex_tran;eg2:proc sql;create table test1 asselectid,max (txn_seq) as txn_seq,sum (amount) as sum_amtfrom chap11.having1group by idhaving calculated sum_amt ge 70;quit;注:having語句出現(xiàn)在group by后面,如果沒喲group by語句,系統(tǒng)默認(rèn)having語句和where語句效

4、果相同proc sql;create table test2 asselectid,txn_seq,amountfrom chap11.having1group by idhaving txn_seq= max (txn_seq);quit;注:having語句和group by語句同時出現(xiàn)時,select后面不一定需要匯總函數(shù)如sum等,上例中,按照每一個id取最大的txn_seqproc sql;create table test3 asselectid,txn_seq,amountfrom chap11.having2group by idhaving txn_seq = max (tx

5、n_seq);quit;having語句和max或min結(jié)合使用時,一定要注意having后面的變量在每一個id中的唯一性。2.多表關(guān)聯(lián)左聯(lián)接在join變量是一對一的情況下,如果where在表的外面,則where條件是先關(guān)聯(lián)表,后篩選數(shù)據(jù),如果where在表中,則是先篩選數(shù)據(jù)后關(guān)聯(lián)表,and也是先篩選數(shù)據(jù)后關(guān)聯(lián)表;因而表內(nèi)寫where和表外寫and是完全一樣的。以下程序,2和3完全一樣,但是1和后面兩個不一樣eg:proc sql;create table leftjoin1 asselectcasewhen b.rmb_id eq . then a.idelse b.rmb_idend as

6、 all_rmb,a.id,b.rmb_id,b.usd_idfrom chap11.left_join_1 as aleft join chap11.left_join_2 as bon a.id=b.usd_idwhere rmb_id le 4;quit;proc sql;create table leftjoin2 asselectcasewhen b.rmb_id eq . then a.idelse b.rmb_idend as all_rmb,a.id,b.rmb_id,b.usd_idfromchap11.left_join_1 as aleft join chap11.lef

7、t_join_2(where=(rmb_id le 4) as bon a.id=b.usd_id;quit;proc sql;create table leftjoin3 asselectcasewhen b.rmb_id eq . then a.idelse b.rmb_idend as all_rmb,a.id,b.rmb_id,b.usd_idfrom chap11.left_join_1 as aleft join chap11.left_join_2 as bon a.id=b.usd_idand rmb_id le 4;quit;3.子查詢in子查詢效率比join低很多,而exi

8、st子查詢效率更低;4.merge和sql的比較在“一對一”和“多對一”的情況下,效果完全相同,但是在“多對多”情況下,則完全不同。創(chuàng)建測試數(shù)據(jù)集data a1;input x y ;cards;101 1 102 3103 30 104 5;run;data a2;input x y ;cards;101 10 102 30103 5 105 50;run;data a3;input x y z1 ;cards;101 11 1 102 33 2102 300 3 104 5 4;run;data a4;input x y z2 ;cards;101 1 5 102 30 6102 5 7

9、102 100 8102 200 9 105 50 10;run;eg1:求a1和a2的交集sql實現(xiàn):merge實現(xiàn)proc sql;selecta1.x,a2.yfrom a1 join a2on a1.x=a2.x;quit;proc sort data=a1;by x;run;proc sort data=a2;by x;run;data a12;merge a1(in=ina) a2(in=inb);by x;if ina and inb;proc print;run;注:sql是通過內(nèi)連接實現(xiàn),merge通過if ina and inb實現(xiàn)eg2:用數(shù)據(jù)集a2來更新數(shù)據(jù)集a1sql

10、實現(xiàn):merge實現(xiàn)proc sql;selecta1.x,case when a2.y is not null then a2.yelse a1.y end as yyfrom a1left join a2on a1.x=a2.x;quit;proc sort data=a1;by x;run;proc sort data=a2;by x;run;data a12;merge a1(in=ina) a2(in=inb);by x;if ina;proc print;run;注:sql通過左聯(lián)接方式實現(xiàn),merge通過if ina方式實現(xiàn),等價于左聯(lián)接eg3:用數(shù)據(jù)集a2來更新數(shù)據(jù)集a1,同時

11、保留兩個數(shù)據(jù)集所有觀測sql實現(xiàn):merge實現(xiàn)proc sql;selectcoalesce(a1.x,a2.x) as x,coalesce(a2.y,a1.y) as yyfrom a1full join a2on a1.x=a2.x;quit;proc sort data=a1;by x;run;proc sort data=a2;by x;run;data a12;merge a1 a2;by x;run;proc print;run;注:sql通過全連接方式實現(xiàn),需求中需要用a2所有變量更新a1,所以一定要把a(bǔ)2變量放在前面,被更新的數(shù)據(jù)集放在后面,但是對join的匹配變量,對這種

12、順序無要求;merge沒有使用in=選項,等價于全連接;eg4:多對多sql實現(xiàn)merge實現(xiàn)proc sql;selecta3.x,a4.y,a3.z1,a4.z2from a3join a4on a3.x=a4.x;quit;proc sort data=a3;by x;run;proc sort data=a4;by x;run;data a34;merge a3(in=ina) a4(in=inb);by x;if ina and inb;run;proc print;run;注:sql形式會出現(xiàn)重復(fù)值,匹配到的數(shù)據(jù)會進(jìn)行笛卡爾;而merge則因為if ina and inb的作用,避

13、免了重復(fù)5.創(chuàng)建表復(fù)制已有的表屬性proc sql;create table alike sashelp.class;describe table a;quit;6.行操作添加行操作使用set語句使用value語句使用select語句proc sql;insert into countriesset name='bangladesh',capital='dhaka',population=126391060set name='japan',capital='tokyo',population=126352003;quit;proc

14、 sql;insert into countriesvalues ('pakistan', 'islamabad', 123060000)values ('nigeria', 'lagos', 99062000);quit;proc sql;create table newconntrieslike countries;insert into newconntriesselect * from countrieswhere population ge 120000000;quit;最后注意:多表關(guān)聯(lián)時,最好不要超過5個表,除非都是

15、代碼表,否則sql會產(chǎn)生很大的臨時空間,從而降低程序性能除非必須,否則優(yōu)先使用關(guān)聯(lián),而不要用子查詢在使用set操作符時,如果set表沒有重復(fù)行,則使用union all會提高性能如果有索引,盡可能用索引和where語句結(jié)合盡量避免多對多joinSAS編程與數(shù)據(jù)挖掘商業(yè)案例學(xué)習(xí)筆記之十八(2013-08-15 16:31:21) 轉(zhuǎn)載標(biāo)簽: 數(shù)據(jù)挖掘數(shù)據(jù)分析saslogistic建模分類: 數(shù)據(jù)挖掘 接著以前的SAS編程與數(shù)據(jù)挖掘商業(yè)案例,之前全是sas的基礎(chǔ)知識,現(xiàn)在開始進(jìn)入數(shù)據(jù)挖掘方面筆記,本文主要介紹數(shù)據(jù)挖掘基本流程以及應(yīng)用方向,并以logistic回歸為例說明。一:數(shù)據(jù)挖掘綜述衡量一個數(shù)

16、據(jù)挖掘模型價值的唯一標(biāo)準(zhǔn)就是商業(yè)目標(biāo),為達(dá)到一個商業(yè)目標(biāo),有很多種方法,只有高效解決商業(yè)目標(biāo)的方法才是最牛的方法,即使是看似簡單的方法,只要能高效解決商業(yè)目標(biāo),我們就認(rèn)為是牛的方法;面對海量的數(shù)據(jù),即使是使用了最先進(jìn)的工具,最復(fù)雜的算法,但是如果挖掘出來的知識是無用的,或者挖掘的結(jié)果是無法解釋的,那這種挖掘也是失敗的。很多人對數(shù)據(jù)挖掘都有一個誤解,認(rèn)為一定要使用復(fù)雜的工具和復(fù)雜的算法,其實是一種誤導(dǎo)。數(shù)據(jù)挖掘流程:商業(yè)理解、數(shù)據(jù)收集、數(shù)據(jù)清洗、數(shù)據(jù)特征化、數(shù)據(jù)建模、模型打分、模型驗證、模型實施、模型優(yōu)化描述分析:對已經(jīng)發(fā)生的現(xiàn)象進(jìn)行分析,主要分析技術(shù)有描述性分析、數(shù)據(jù)特征化、聚類分析、孤立點分

17、析因果分析:尋找發(fā)生的原因,主要技術(shù)有聯(lián)機(jī)分析、相關(guān)性分析、回歸分析、關(guān)聯(lián)分析、因子分析分類和預(yù)測:主要分類技術(shù):決策樹、判別分析、貝葉斯分類、logistic回歸分析、神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)等預(yù)測技術(shù)有:多元線性回歸分析、廣義線性回歸分析、非線性回歸分析、神經(jīng)網(wǎng)絡(luò)分析二:商業(yè)目標(biāo):1、評價活動的效果:比較分析通過開展工作組和控制組進(jìn)行比對。2.特征分析比如要分析高價值客戶的特征,通過特征化數(shù)據(jù)(均值、方差、極值)、相關(guān)性度量(相關(guān)系數(shù)、卡方值、基尼系數(shù)、熵)、聚類分析、因子分析等發(fā)現(xiàn)表面的和潛在的數(shù)據(jù)特征。3.市場細(xì)分市場細(xì)分由業(yè)務(wù)主導(dǎo),而不是技術(shù)主導(dǎo)。細(xì)分結(jié)果一定要以易于開展?fàn)I銷活動為目的。

18、4.響應(yīng)提高某個營銷活動的響應(yīng)度5.風(fēng)險風(fēng)險控制指標(biāo)通常包括:資產(chǎn)負(fù)債情況、信用記錄、工作穩(wěn)定性、收入、教育程度、家庭人口結(jié)構(gòu)風(fēng)險模型的建立在技術(shù)上類似于響應(yīng)模型,但對于業(yè)務(wù)上有很大的區(qū)別,比如定義目標(biāo)變量上,風(fēng)險模型可能有很多因素決定,一個比較常見的定義:拖欠額度超過某一數(shù)值,并逾期超過3個月的客戶作為風(fēng)險客戶(目標(biāo)變量值為1,其余情況為0)6.流失重點在于流失目標(biāo)變量的定義;7.提升銷售和交叉銷售數(shù)據(jù)挖掘商業(yè)應(yīng)用的最高原則是:“效率、效果”3.需求文檔需求文檔包括三部分項目計劃文檔(ppt)商業(yè)目標(biāo)、技術(shù)目標(biāo)、計劃內(nèi)容、項目路線圖、給出分析團(tuán)隊如何實施項目的明確時間表和每一階段的任務(wù)資源:

19、是每一個項目階段所需要的參與項目人員方法論設(shè)計文檔(word)是解決商業(yè)需求的技術(shù)文檔,是一個解決方案,最核心的內(nèi)容是組合不同的算法,并給出最終能達(dá)到的理論目標(biāo)變量需求文檔(excel)4.建模流程圖5.logistic建模及結(jié)果詳解商業(yè)應(yīng)用領(lǐng)域,logistic回歸是應(yīng)用最廣泛的預(yù)測模型,神經(jīng)網(wǎng)絡(luò)存在過度擬合的嫌疑,而決策樹可能存在預(yù)測結(jié)果的不穩(wěn)定性,并且在大數(shù)據(jù)的情況下決策樹存在失靈現(xiàn)象,因此logistic回歸相對于另外兩個是一個適度的模型,再加上輸出結(jié)果有很好的解釋性,應(yīng)用很廣泛logistic變換:logit(p)=ln(p/1-p) 然后再與自變量進(jìn)行線性擬合logistic回歸中

20、,因變量y服從二項分布或多項分布,而線性回歸分析中y是服從正態(tài)分布logistic回歸中不存在線性回歸中的殘差項,logistic回歸采用MLE(最大似然估計),而線性回歸分析采用的是LSE(最小二乘估計)LSE的原理是假設(shè)殘差獨(dú)立同分布,然后構(gòu)造樣本函數(shù),使得因變量的觀測值和模型估計值之間的離差平方和最小。MLE的原理,是構(gòu)造似然函數(shù),對于二值型的logistic回歸來說,服從二點分布,評價模型好壞的指標(biāo):1)擬合優(yōu)度擬合優(yōu)度是衡量預(yù)測值和觀測值之間的總體一致性,但是在評價模型時,實際上測量的是預(yù)測值和觀測值之間的差別,實際上是模型預(yù)測的“劣度”,即擬合不佳檢驗,常用的指標(biāo)是HL(hosme

21、r-lemeshow)和IM(information measures)HL是一種類似于皮爾遜-卡方統(tǒng)計量的指標(biāo),對應(yīng)的統(tǒng)計假設(shè)H0是預(yù)測值概率和觀測值之間無顯著差異,因而如果HL有較大的P值,則接受原假設(shè),說明統(tǒng)計結(jié)果不顯著,因而,不能拒絕關(guān)于模型擬合數(shù)據(jù)很好的假設(shè),即模型很好的擬合了數(shù)據(jù)??梢酝ㄟ^調(diào)用lackfit選項命令實現(xiàn)IM指標(biāo)中比較顯著的是AIC和SC,AIC越小標(biāo)示擬合模型越好,sc是對aic指標(biāo)的一種修正,與AIC同向作用2)卡方統(tǒng)計卡方統(tǒng)計監(jiān)測的是模型中所包含的自變量對因變量有顯著的解釋能力,在多元線性回歸和ANOVA中,常用F檢驗達(dá)到目的,在logistic中用似然比檢驗,

22、相當(dāng)于F檢驗,在sas輸出結(jié)果中就是likelihood ratio對應(yīng)的值,注:卡方值和擬合優(yōu)度是兩個完全不同的概念,前者度量的是自變量和因變量的ODDS自然對數(shù)線性相關(guān),而后者度量的是預(yù)測值和觀測值之間的一致性,所以,最好是模型卡方統(tǒng)計性顯著而擬合優(yōu)度統(tǒng)計性不顯著。3)預(yù)測準(zhǔn)確性預(yù)測準(zhǔn)確性問題是:檢驗所有x變量到底能解釋多少Y變量的波動RSQUARE:Y變異中被解釋的比例,C統(tǒng)計量:度量的是觀測值和條件預(yù)測概率之間的相對一致性;指標(biāo)越高,表示預(yù)測概率與觀測反應(yīng)變量之間的關(guān)聯(lián)越密切??偨Y(jié)如下:統(tǒng)計量趨勢作用sas命令備注C統(tǒng)計量越大越好度量的是觀測值和條件預(yù)測概率之間的相對一致性自動輸出似然

23、比卡方越大越好類似于F檢驗,度量回歸平方和,自變量對因變量的顯著解釋能力自動輸出P值越小越好AIC越小越好類似于多遠(yuǎn)回歸殘差平方和自動輸出RSQUARE越大越好Y變異中被解釋的比例RSQHL統(tǒng)計量越小越好度量觀測值與預(yù)測值總體的一致性LACKFITP值越大越好商業(yè)實戰(zhàn)中,一般考慮前兩種,因為logistic回歸是一個分類模型,目標(biāo)變量的值只是一個分類標(biāo)示,因而更關(guān)注觀測值和預(yù)測值之間的相對一致性,而不是絕對一致性,因而分析師更關(guān)注于模型預(yù)測概率值的排序,而lift圖也正是從概率排序結(jié)果得到的。應(yīng)用舉例和輸出結(jié)果的解釋Proc logistic data=lg.remission desc; *

24、按目標(biāo)變量降序輸入建模數(shù)據(jù)集model remiss =cell smear infil li blast temp / selection=stepwiseslentry=0.3 slstay=0.35 details lackfit stb; *設(shè)置進(jìn)入閾值和保留閾值,并輸出詳細(xì)結(jié)果,輸出HL統(tǒng)計量,輸出標(biāo)準(zhǔn)化數(shù) 據(jù)后的模型參數(shù)output out=pred p=phat; *設(shè)置預(yù)測概率變量為phatRun;在輸出結(jié)果association of predicted probabilities and observed responses中最后一列的C統(tǒng)計量,一般大于0.7以上就可以用該

25、模型SAS編程與數(shù)據(jù)挖掘商業(yè)案例學(xué)習(xí)筆記之十九(2013-08-23 23:12:17) 轉(zhuǎn)載標(biāo)簽: 數(shù)據(jù)挖掘數(shù)據(jù)處理正則表達(dá)式sas編程sas分類: SAS編程 繼續(xù)SAS編程與數(shù)據(jù)挖掘商業(yè)案例學(xué)習(xí)筆記,本文側(cè)重數(shù)據(jù)處理實踐,包括:HASH對象、自定義format、以及功能強(qiáng)大的正則表達(dá)式一:HASH對象Hash對象又稱散列表,是根據(jù)關(guān)鍵碼值而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu),是根據(jù)關(guān)鍵碼值而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu),sas提供了兩個類來處理哈希表,用于存儲數(shù)據(jù)的hash和用于遍歷的hiter,hash類提供了查找、添加、修改、刪除等方法,hiter提供了用于定位和遍歷的first、next等方法。優(yōu)點

26、:鍵值的查找是在內(nèi)存中進(jìn)行的,有利于提高性能;hash表可以在數(shù)據(jù)步運(yùn)行時,動態(tài)的添加更新或刪除觀測;hash表中可以很快的定位數(shù)據(jù),減少查找次數(shù);常用方法:definekey:定義鍵Definedata:定義值definedone:定義完成,可以載入數(shù)據(jù)add:添加鍵值,如在hash表中已存在,則忽略;replace:如果健在hash表中存在,則替換,如果不存在則添加鍵值remove:清除鍵值對find:查找健值,如果存在則將值寫入對應(yīng)變量check:查找鍵值,如果存在則返回rc=0,不修改當(dāng)前變量的值;output:將hash表輸出到數(shù)據(jù)集clear:清空hash表,但并不刪除對象equa

27、l:判斷兩個hash類是否相等find方法的示例:libname chapt12 'f:data_modelbook_datachapt12'data results;if _n_=0 then set chapt12.participants; if _n_ = 1 then do;declare hash h(dataset:'chapt12.participants'); h.definekey('name');h.definedata('gender', 'treatment');h.definedone(

28、);end;set chapt12.weight;if h.find() = 0 thenoutput;run;hiter對象的引例:data patients;length patient_id $ 16 discharge 8;input patient_id discharge:date9.;datalines;smith-4123 15mar2004hagen-2834 23apr2004smith-2437 15jan2004flinn-2940 12feb2004;data _null_;if _n_=0 then set patients;declare hash ht(data

29、set:"patients",ordered:"ascending");ht.definekey("patient_id");ht.definedata("patient_id", "discharge");ht.definedone();declare hiter iter("ht");rc = iter.first();do while (rc=0);put patient_id discharge:date9.;rc = iter.next();end;run;用dec

30、lare hiter iter("ht");給hash表ht定義了一個遍歷器iter,之后調(diào)用first方法將遍歷器定位到hash表的第一條觀測,然后使用next方法遍歷hash表中的所有記錄并輸出。商業(yè)實戰(zhàn)-兩個數(shù)據(jù)集的合并:data both1(drop=rc); declare hash plan (); rc = plan.definekey ('plan_id'); rc = plan.definedata ('plan_desc'); rc = plan.definedone (); do until (eof1) ; set c

31、hapt12.plans end = eof1;rc = plan.add (); end;do until (eof2) ; set chapt12.members end = eof2;call missing(plan_desc);rc = plan.find (); output; end;stop;run;上述程序可以簡化為:data both2;length plan_id $3 plan_desc $20;if _n_ = 1 then do;declare hash h(dataset:'chapt12.plans');h.definekey('plan

32、_id');h.definedata('plan_desc');h.definedone();call missing(plan_desc);end;set chapt12.members;rc=h.find();run;二:format自定義format:Proc Format;Value $ Sex_Fmt'F'='女''M'='男'Other = '未知'Value Age_DurLow-10="10歲以下" 11-13="11-13歲"14-&

33、lt;15="14-15"15-High="15歲以上"Run;應(yīng)用:Data test;Set sashelp.class(keep=sex age);x=put(sex,$sex_fmt);y=put(age,age_dur.);Run;三:正則表達(dá)式:/./ 一個正則表達(dá)式的起止;| 數(shù)項之間的選擇,“或”運(yùn)算;() 匹配組,標(biāo)記一個子表達(dá)式的開始和結(jié)束位置;. 除換行符以外的任意字符;w 任一單詞字符,數(shù)字大小寫字母以及下劃線W 任一非單詞字符s 任一空白字符,包括空格、制表符、換行符、回車符、中文全角空格等;S 任一非空白字符,d 0-9任一數(shù)

34、字D 任一非數(shù)字字符.a-z 從a到za-z 不在從a到z范圍內(nèi)的任意字符 匹配輸入字符串的開始位置$ 匹配輸入字符串的結(jié)尾位置b 描述單詞的前或后邊界B 表示非單詞邊界* 匹配0次或多次+ 匹配一次或多次? 匹配零次或 一次n 匹配n次n, 匹配n次以上n,m 匹配n到m次常用函數(shù):Prxparse 定義一個正則表達(dá)式Prxmatch 返回匹配模式的首次匹配位置Call prxsubstr 返回匹配模式在目標(biāo)字符串的開始位置和長度Prxposn 返回正則表達(dá)式子表達(dá)式對應(yīng)的匹配模式值Call prxposn 返回正則表達(dá)式子表達(dá)式對應(yīng)的匹配模式和長度Cal l prxnext 返回匹配模式在

35、目標(biāo)字符串中的多個匹配位置和長度Prxchange 替代匹配模式的值Call prxchange 替代匹配模式的值eg1:data _null_;if _n_ = 1 then pattern_num = rxparse("/cat/");retain pattern_num;input string $30.;position = rxmatch(pattern_num,string);file print;put pattern_num= string= position=;datalines;there is a cat in this line.does not m

36、atch catcat in the beginningat the end, a catcat;run;eg2:數(shù)據(jù)驗證data match_phone;set chapt12.phone_numbers;if _n_ = 1 then pattern = prxparse("/(ddd) ?ddd-d4/");retain pattern;if prxmatch(pattern,phone) gt 0 then output;run;找出不匹配的手機(jī)號碼data unmatch_phone;set chapt12.phone_numbers;where not prxm

37、atch("/(ddd) ?ddd-d4/",phone);run;Eg3:提取匹配某種模式的字符串data extract;if _n_ = 1 then do;pattern = prxparse("/(ddd) ?ddd-d4/");if missing(pattern) then do;put "error in compiling regular expression"stop;end;end;retain pattern;length number $ 15;input string $char80.;call prxsu

38、bstr(pattern,string,start,length);if start gt 0 then do;number = substr (string,start,length); number = compress(number," ");output;end;keep number;datalines;this line does not have any phone numbers on itthis line does: (123)345-4567 la di la di laalso valid (123) 999-9999two numbers here

39、 (333)444-5555 and (800)123-4567;run;eg4:提取名字data ReversedNames;input name & $32.;datalines;Jones, FredKavich, KateTurley, RonDulix, Yolanda;data FirstLastNames;length first last $ 16;keep first last;retain re;if _N_ = 1 thenre = prxparse('/(w+), (w+)/');set ReversedNames;if prxmatch(re,

40、 name) thendo;last = prxposn(re, 1, name);first = prxposn(re, 2, name);end;run;注:1,2分別代表正則表達(dá)式中的兩個組eg5:提取符合規(guī)定的名字data old;input name $60.;datalines;Judith S ReaveleyRalph F. MorganJess EnnisCarol EcholsKelly Hansen HuffJudithNickJones;data new;length first middle last $ 40;re1 = prxparse('/(S+)s+(

41、s+s+)?(S+)/o');re2 = prxparse('/(S+)(s+)(s+s+)(?)(S+)/o');set old;id1=prxmatch(re1, name);id2=prxmatch(re2, name);if id1 thendo;first = prxposn(re1, 1, name);middle = prxposn(re1, 2, name);last = prxposn(re1, 3, name);end;if id2 then test=prxposn(re1, 4, name);put test=;run;Eg6:返回匹配模式的多個

42、位置data _null_;expressionid = prxparse('/crbat/');text = 'the woods have a bat, cat, and a rat!'start = 1;stop = length(text);call prxnext(expressionid, start, stop, text, position, length);do while (position > 0);found = substr(text, position, length);put found= position= length=;

43、call prxnext(expressionid, start, stop, text, position, length);end;run;注:首次執(zhí)行call prxnext返回一個position,然后進(jìn)入循環(huán),在抽取滿足條件的子串中,再次執(zhí)行all prxnext,此時會返回下一個匹配的position;Eg7:替換文本data cat_and_mouse;input text $char40.;length new_text $ 80;if _n_ = 1 then match = prxparse("s/Ccat/mouse/");retain match;c

44、all prxchange(match,-1,text,new_text,len,trunc,num); if trunc then put "note: new_text was truncated"datalines;the Cat in the hatthere are two cat cats in this linehere is no replacement;run;一些常用的SAS命令1. 轉(zhuǎn)換文本數(shù)據(jù)文件的數(shù)據(jù)步的一般形式為:data 數(shù)據(jù)集名;infile 文件名;input 變量輸入設(shè)定;run;2. 指定邏輯文件名語句的一般形式為:filename 邏

45、輯文件名 文件位置;3. 查看SAS邏輯庫的屬性和內(nèi)容的一般寫法為:proc datasets lib=邏輯庫名;run;4. 查看SAS數(shù)據(jù)集的屬性的一般寫法為:proc contents data=數(shù)據(jù)集名;run;5. 輸出數(shù)據(jù)集的數(shù)據(jù)部分的一般寫法為:proc print data=數(shù)據(jù)集名;run;6.為了實現(xiàn)存儲和管理面向?qū)ο蟮拈_發(fā)任務(wù),SAS建立目錄冊(catalog)類型的文件,在這一類文件中可以存儲整個應(yīng)用系統(tǒng),包括它的界面,源程序和各種對象間的連接;7. SAS邏輯庫是一個邏輯概念,一個邏輯庫就是存放在同一文件夾或幾個文件夾中的一組SAS文件;8.在SAS軟件系統(tǒng)的信息組織

46、中,總共只有兩個層次:SAS邏輯庫是高一級的層次,低一級的層次就是SAS文件本身;9.在SAS系統(tǒng)中,為便于訪問一個SAS文件,要為該SAS文件所在的位置指定一個SAS邏輯庫,即賦予一個邏輯庫名,在指定邏輯庫名后,就可使用兩級命名的方式引用SAS文件:邏輯庫名.文件名;10.在每個SAS進(jìn)程一開始,系統(tǒng)就自動地指定了一些邏輯庫供用戶使用,它們是WORK、SASHELP和SASUSER;11.在每個SAS進(jìn)程開始時系統(tǒng)缺省地創(chuàng)建名為work的SAS邏輯庫,它是一個臨時邏輯庫,在引用WORK庫中的SAS文件時,可省略邏輯庫名;12.永久邏輯庫是指它的內(nèi)容在當(dāng)前SAS進(jìn)程結(jié)束時仍被保留的SAS邏輯庫

47、,在SAS系統(tǒng)中除了庫名為WORK以外的邏輯庫都是永久庫;13. Sashelp包含所安裝SAS系統(tǒng)各個產(chǎn)品有關(guān)的SAS文件,運(yùn)行安裝的SAS系統(tǒng)所需要的SAS文件缺省地存儲在這個邏輯庫中;14. Sasuser包含為滿足用戶需要而特制的SAS文件,用戶的一些設(shè)置也放在Sasuser邏輯庫中;Sasuser也是存放為您個人使用而創(chuàng)建的文件的合適場合;15.庫引擎是規(guī)定系統(tǒng)用什么格式向邏輯庫讀寫文件的內(nèi)部指令;16.由于Sashelp、Sasuser和Work是系統(tǒng)自動設(shè)定的,這些邏輯庫名是不能刪除的;17.一個SAS數(shù)據(jù)集是一個包含兩個組成部分的文件:一個描述部分和一個數(shù)據(jù)部分。某些SAS數(shù)據(jù)

48、集也另外包含一個索引文件;18. SAS數(shù)據(jù)集的變量屬性信息包括變量的:名稱(name)、類型(type)、長度(length)、輸出格式(format)、輸入格式(informat)和變量標(biāo)簽(label);19.SAS編程前必須明確以下三個方面:什么是輸入的或供操作的數(shù)據(jù)、要對輸入的數(shù)據(jù)進(jìn)行什么加工、期望的輸出結(jié)果是什么;20.每個SAS程序是由許多完成單個動作的程序步和一些設(shè)定環(huán)境的語句構(gòu)成的;21.數(shù)據(jù)步(data step):讀入源數(shù)據(jù)文件和SAS數(shù)據(jù)集,修改、編輯或創(chuàng)建SAS數(shù)據(jù)集或文本文件;22.過程步(proc step):面向SAS數(shù)據(jù)集,完成某個特定的計算、分析和呈現(xiàn)的功能

49、;23.每個語句是由一個關(guān)鍵詞開始,并以分號結(jié)束,通常就用開始的關(guān)鍵詞命名這個語句;24. DATA語句和PROC語句分別標(biāo)志數(shù)據(jù)步和過程步的開始,RUN語句或另一個程序步的開始標(biāo)志程序步的結(jié)束;25.指定邏輯庫名的語句的一般形式為:libname 邏輯庫名 庫的實際地址;26在程序編輯器窗口提交語句: libname 邏輯庫名 list;可以在log窗口顯示該邏輯庫的連接;27.多個物理位置指定同一個邏輯庫名的一般形式為:libname 邏輯庫名(物理位置1 物理位置2);28. SAS的子窗口主要有瀏覽器窗口(EXPLORER)、結(jié)果窗口(RESULTS)、程序編輯器窗口(program

50、editor)、日志窗口(log)、輸出窗口(output);29.切換至日志窗口的命令是log、熱鍵是F6;切換至輸出窗口的命令是output、熱鍵是F7;30.提交SAS程序的命令是submit;31. SAS系統(tǒng)是大型集成軟件系統(tǒng),具備完備的數(shù)據(jù)訪問、管理、分析和呈現(xiàn)及應(yīng)用開發(fā)功能;32. SAS數(shù)據(jù)集是一類由SAS系統(tǒng)建立、維護(hù)和管理的數(shù)據(jù)文件;33. input語句的一般形式為:input 指針控制 變量名 輸入格式;34. 指針控制n表示從第n列開始讀入,+n表示將列控制指針增加n列后讀入;35. 程序數(shù)據(jù)列PDV包含兩個自動生成的(臨時)變量:_N_、_ERROR_,它們可以在程

51、序中使用,但不作為觀測的一部分寫入數(shù)據(jù)集;36. retain語句的一般形式為:retain 變量名<初值> 變量名<初值> ;37. 在數(shù)據(jù)步執(zhí)行的每次循環(huán)中,retain語句指定的變量不再從新初始化,保留它以前存儲的結(jié)果;38. 求和語句的一般形式是:變量名+表達(dá)式;在求和語句中加號前后的項有不同的作用,一個是累加的變量,另一個是相加的表達(dá)式,兩者位置是不能互換的;39. 函數(shù)LAG和DIF調(diào)用的一般形式為:LAG(變量名);DIF(變量名);函數(shù)LAG的返回值是上一條記錄中該變量的值,函數(shù)DIF的返回值是當(dāng)前記錄中變量值減去上一條記錄中該變量的值;40. 實現(xiàn)將加工結(jié)果存為文本格式的數(shù)據(jù)步程序的一般形式為:Data_Null_;數(shù)據(jù)讀入語句組;數(shù)據(jù)加工語句組;file 文件名<選項>;put 變量寫入設(shè)定;run;41. 過程import的作用是實現(xiàn)將PC格式數(shù)據(jù)文件、以固定字符為字段分隔符的文本文件轉(zhuǎn)換為SAS數(shù)據(jù)集;42. DROP和KEEP語句的作用是實現(xiàn)對生成數(shù)據(jù)集的變量進(jìn)行刪減;43. 在數(shù)據(jù)步的加工過程中,可使用IF語句選擇要保留的觀測,其一般形式為:IF 表達(dá)式;44. 臨時變量FIRST.*它在BY 變量每個值的第一條記錄時為1,否則為0;臨時變量LAST.*它在BY變量每個值的最后一條記錄時為1,否則為0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論