同樣數量之間的數字是否有可能使用數字在此字符串:SAS PRXCHANGE話到空格
「xx8xx」
通過更換與8個空格的數量得到這個字符串:
'xx xx'
我可以識別XX但更換語法之間的數量預期不起作用:
PRXCHANGE(s/xx([\d]*)xx/' ' x $1/io, -1, 'xx8xx')
是否有使用被關押在$ 1號被這個數字重複空格字符類似的東西,即'X $ 1的方式?
任何幫助非常感謝! Tiaan
同樣數量之間的數字是否有可能使用數字在此字符串:SAS PRXCHANGE話到空格
「xx8xx」
通過更換與8個空格的數量得到這個字符串:
'xx xx'
我可以識別XX但更換語法之間的數量預期不起作用:
PRXCHANGE(s/xx([\d]*)xx/' ' x $1/io, -1, 'xx8xx')
是否有使用被關押在$ 1號被這個數字重複空格字符類似的東西,即'X $ 1的方式?
任何幫助非常感謝! Tiaan
認爲你需要三個空白取代。
data _null_;
x=prxchange('s/(xx)\d+(xx)/$1 $2/', -1, 'xx8xx');
_x=prxchange('s/(?=\w+)(\d+)/ /',1,'xx8xx');
put _all_;
run;
編輯: 我錯過了重要的信息。 Tranwrd和重複可以用來得到它。
data _null_;
x=tranwrd('xx8xx', prxchange('s/.*(\d+).*/$1/',1,'xx8xx'), repeat(' ',prxchange('s/.*(\d+).*/$1/',1,'xx8xx')));
put _all_;
run;
有趣的解決方案(第二個),它的工作原理(不得不加-1,因爲它創造了9位),我的目的。 X = tranwrd( 'xx8xx',prxchange(的/.*(\ d +)。*/$ 1 /',1 'xx8xx'),重複(」',prxchange(的/.*(\ d + )*/$ 1 /」,1 'xx8xx') - 1)); 謝謝Sheglin! – Tiaan
你需要首先提取,然後編譯一個新的正則表達式。這將會很昂貴,因爲你必須每行編譯一次。
data have;
input xstr $;
datalines;
xx8xx
xx3xx
xx4xx
;;;;
run;
data want;
set have;
rx1 = prxparse('/xx([\d])*xx/io');
rc1 = prxmatch(Rx1,xstr);
num_x = prxposn(rx1,1,xstr);
rx2 = prxparse(cat('s/(xx)[\d]*(xx)/$1',repeat(" ",num_x-1),'$2/i'));
newstr = prxchange(rx2,-1,xstr);
run;
感謝喬,沒有經過充分測試您的解決方案,因爲它比李盛霖的更詳細一點 – Tiaan
MMM的第4行中的空格數已減少到1,它應該是8個空格>< – Tiaan
在SAS 9,PCRE正則表達式的使用,但即使是不讓你使用像圖案。您無法評估字符串替換部分中的組內容。你需要寫一些代碼。 –
似乎你是正確的,它不能在一個聲明中完成,謝謝你的反饋! – Tiaan