這是【SAS正則表達(dá)式】系列的第五集。請在后臺回復(fù)[SASRE]獲取整個系列
改變形狀和改變陰影| 5。呼叫PRXCHANGE()
0.回顧前一集
1.新問題
2.會見PRXCHANGE()
3.問題解決
0.回顧前一集:
如前所述,小王剛剛畢業(yè),來到數(shù)碼國際零售公司做數(shù)據(jù)分析師,幫產(chǎn)品部的妹子解決一個問題。下面是產(chǎn)品列表,有些行是產(chǎn)品名稱,有些行是產(chǎn)品編號?,F(xiàn)在只想保留數(shù)字(也就是紅色字體部分),把數(shù)字分別放在括號里(括號里的數(shù)字代表產(chǎn)品類別),提取帶有PD的logos(代表過期產(chǎn)品)。
(01)1872-8756
P1美發(fā)店
圖書B13
(05)9212-0098
PD(05)9206-4571
舒碩手機(jī)
(12) 6753-5513
這里沒有
PD(12)6434-4532
P&。洗滌
PC Pro4321S:(09) 1352-3154
小王的SAS代碼如下:
數(shù)據(jù)生產(chǎn);
if _ N _ = 1 then pattern = PRXPARSE("/(P?d?)((dd))?d { 4 }-d { 4 }/);
retainpattern
inputname $char40。;
lengthid $ 20
callPRXSUBSTR(模式、名稱、開始、長度);
*以下PRXPOSN必須與此PRXMATCH一起使用;
match =PRXMATCH(模式,名稱);
iflength GT 0thendo
*獲取產(chǎn)品的完整ID;
id=substr(名稱、開始、長度);
id=compress(id," ");
*獲取ID中的產(chǎn)品類型(即括號中的數(shù)字);
callPRXPOSN(pattern,2,start_2,length _ 2);
category=substr(name,start_2,length _ 2);
*獲取ID中產(chǎn)品的過期信息;
callPRXPOSN(pattern,1,start_1,length _ 1);
iflength _ 1 gt 0 then PD = substr(name,start_1,length _ 1);
輸出;
結(jié)束;
keepid類別PD;
數(shù)據(jù)線;
(01)1872-8756
P1美發(fā)店
圖書B13
(05)9212-0098
PD(05)9206-4571
Shushuophone
(12)6753-5513
這里沒有
PD(12)6434-4532
P&。DWashing
PC Pro4321S:(09) 1352-3154
;
procprintnoobs
標(biāo)題‘生產(chǎn)標(biāo)識’;
跑步;
獲得最終結(jié)果:
單擊此處查看之前的劇集:
1.新問題
哎呀!
所有數(shù)字的后八位都是反的!
XXXX-YYYY,應(yīng)該改為YYYY-XXXX
換句話說,你看到產(chǎn)品清單上的號碼:(01)1872-8756
其實應(yīng)該是:(01)8756-1872
怎么辦?
放心,小王是用PRXCHANGES()函數(shù)換位置的。
2.第一次遇到PRXCHANGES()
該功能有兩個功能:
1)任意字符的替換;
2)可以幫助我們自由重組一個段落,這是我們這一集要解決的問題。
前提是必須配合PRXPARSE使用。
1)更換
pattern = PRXPARSE(" s/Shu Shuo/帥帥/")
PRXCHANGE(模式、時間、字符串、新字符串、結(jié)果長度、截斷值、更改次數(shù))
看到很多參數(shù)不要覺得復(fù)雜。我用灰色標(biāo)注的時候一般不用。
首先,PRXPARSE()語句與前一個有些不同,所以要注意用紅色標(biāo)注的部分。
正則表達(dá)式的開頭有一個額外的s字母,用來指定替換或重排。在兩個斜杠“//”之間,還有一個斜杠/(用紅色標(biāo)注),表示斜杠的左邊是被替換的部分,右邊是被替換的字符。在這個例子中,“舒碩”應(yīng)該被替換為“帥帥”。
PACHANGE()的參數(shù)用法如下:
Pattern是前面PRXPARSE指定的正則表達(dá)式。
Times用于指定要替換的次數(shù)。如果設(shè)置為-1,則表示只要字符中有匹配,就會被替換。
String是要替換的字符,new_string是替換后的新字符串。
Result_length返回新字符的長度
truction-value返回0或1,指示新字符是否已被裁剪。如果新字符太長,它將被裁剪,即1。
Numer of changes返回匹配項替換了多少原始字符。
當(dāng)然,不能生成新字符new_string,只能替換和修改原來的字符,例如:
pattern = PRXPARSE(" s/Shu Shuo/帥帥/")
PRXCHANGES(模式,-1,字符串)
2)重排
這很有趣。前面說過,“打包”就是把正則表達(dá)式的一部分封裝起來,“打包”這段。在這里,我們可以重新排列部分:
pattern = PRXPARSE(" s/(Shu)(Shuo)/$ 2 $ 1/")
PRXCHANGE(模式、時間、字符串、新字符串、結(jié)果長度、截斷值、更改次數(shù))
變化主要在PRXPARSE,其中(shu)和(shu)分別用和包裝和表示,其次是,這意味著它們以shuoshu的方式排列。我們來看看SAS。
datatemp
string= "我愛舒碩";
pattern = PRXPARSE(" s/(Shu)(Shuo)/$ 2 $ 1/";
callPRXCHANGE(模式,-1,字符串);
fileprint
put string =;
跑步;
輸出結(jié)果是:
碩碩被重新安排到舒舒了!
3.問題解決
讓我們重新排列之前分類的產(chǎn)品標(biāo)識列表:
自我
(01)1872-8756
(05)9212-0098
PD(05)9206-4571
(12)6753-5513
PD(12)6434-4532
(09)1352-3154
將-前后四位數(shù)字,即1872-8756改為8756-1872等。SAS代碼如下:
數(shù)據(jù)生產(chǎn);
if _ N _ = 1 then pattern = PRXPARSE(" s/(P?d?(dd)?)(d { 4 })(-)(d { 4 })/$ 1 $ 4 $ 3 $ 2/";
retainpattern
inputid $char40。;
lengthnew_id 。;
callPRXCHANGE(pattern,-1,id,new_id,r_length,trunc,n _ of _ changes);
數(shù)據(jù)線;
(01)1872-8756
(05)9212-0098
PD(05)9206-4571
(12)6753-5513
PD(12)6434-4532
(09)1352-3154
;
procprintnoobs
標(biāo)題‘生產(chǎn)標(biāo)識’;
varid new _ id
跑步;
結(jié)果是:
讓我們再次嘗試將它集成到原始代碼中。以下是我自己的代碼,供您參考:
數(shù)據(jù)生產(chǎn);
if _ N _ = 1then
pattern=PRXPARSE("s/(P?d?(dd)?)(d { 4 })(-)(d { 4 })/$ 1 $ 4 $ 3 $ 2/";
retainpattern
if _ N _ = 1 then pattern 2 = PRXPARSE("/P?d?(dd)?d { 4 }-d { 4 }/);
retainpattern2
inputname $char40。;
lengthnew_name 。;
lengthid $ 20
callPRXCHANGE(模式,-1,名稱,new _ name);
callprxssubstr(pattern 2,new_name,start,length);
iflength gt 0thendo
id=substr(new_name,start,length);
id=compress(id," ");
輸出;
結(jié)束;
數(shù)據(jù)線;
(01)1872-8756
P1美發(fā)店
圖書B13
(05)9212-0098
PD(05)9206-4571
Shushuophone
(12)6753-5513
這里沒有
PD(12)6434-4532
P&。DWashing
PC Pro4321S:(09) 1352-3154
;
procprintnoobs
標(biāo)題‘生產(chǎn)標(biāo)識’;
varname new _ name id
跑步;
SAS的結(jié)果是:
眾所周知,正則表達(dá)式是文本分析的利器。有關(guān)文本分析和文本搜索,請參見:
做一個小游戲,你覺得這個系列的SAS正則表達(dá)式怎么樣?
1.不好——跳到a。
2.好-跳到2.1
2.1獎勵?
獎勵——跳到b。
沒有獎勵-跳到2.2
2.2點擊文章結(jié)尾的廣告?
點擊-跳到c
不要點擊-跳轉(zhuǎn)到a。
你有什么建議?可以在文末評論區(qū)留言,幫我做的越來越好!
b謝謝您,先生~!請在文章最后給我一個獎勵。我會再接再厲!
c謝謝小哥哥,謝謝美女~!廣告主會給我獎勵的!
相關(guān)建議:
[SAS基礎(chǔ)]
回復(fù)[sasbase]查看
IML公司(矩陣交互模塊)
回復(fù)[sasiml]查看
1.關(guān)于數(shù)據(jù)分析的問題或者求助,直接在微信后臺留言。
2.轉(zhuǎn)載、投稿、發(fā)布免費招聘與合作,請?zhí)砑觽€人微信AnselT,或郵箱:jiayounet@163.com。
3.查看完所有文章請在后臺回復(fù)[M]
舒碩工作室
數(shù)據(jù)分析師主頁|金融生物零售互聯(lián)網(wǎng)
微信ID: shushujun
龍按下二維碼去關(guān)注數(shù)字工作室
1.《移形換影 5. call PRXCHANGE | 移形換影》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《移形換影 5. call PRXCHANGE | 移形換影》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/yule/878882.html