2013-04-22 45 views
0

enter image description here有沒有什麼方法來轉換字符串模式,如下圖所示?

嘗試轉換「目前」模式在上表中「變成」數據集中模式... 例子顯示,在未來2列每一個.... 我嘗試不同的方法,但我無法得到所需的輸出.... 下面是代碼來獲取輸入數據....

data Current; 
Input Currently :$40.; 
Datalines; 
HiKumar"^TM1()^",test 
HiKumar"^TM2()^" 
HiKumar^TM3()^HiKumar 
HiKumar^f(‘VARNAME’).any(‘#’)^ 
HiKumar^f(‘VARNAME’)^ 
HiKumar^f(‘VARNAME’).get()==’#’^ 
HiKumar^f(‘VARNAME’)==’#’^ 
HiKumar^f(‘VARNAME’).toNumber()^ 
HiKumar^f(‘VARNAME’).toString()^ 
HiKumar^f(‘VARNAME’).toString().toLowerCase()^ 
HiKumar^f(‘VARNAME’).toString().toUpperCase()^ 
HiKumar^f(‘IFCONDITION’)?’THENTEXT’:’ELSETEXT’^ 
HiKumar<br> 
HiKumar<br/> 
HiKumar<br /> 
HiKumar^MobileHeader()^ 
HiKumar^MobileFooter()^ 
HiKumar<u> 
HiKumar</u> 
HiKumar&nbsp 
; 
run; 

回答

1

我會去使用正則表達式。你需要幾個;這是一個開始。 (引用字符可能會被W​​eb瀏覽器和/或SAS廢棄,所以我會建議手動替換這些字符,而不是相信複製/粘貼,如果它們不起作用的話)。這隻能識別第四行,但可以爲其他行構建類似的正則表達式(有些應該可以用於多行)。

data want; 
set current; 
rx_1 = prxparse("/\^f\(‘(\w*?)’\)\^/"); 
rc_1 = prxmatch(rx_1,currently); 
if rc_1 ne 0 then have = prxposn(rx_1,1,currently); 
run; 
+0

喜喬,感謝您的回答......它工作得很好,我試圖用PRXCHANGE代替PRXPOSN ....我不知道Perl腳本編程的線索。如果您向上表中的所有行發送prxparse,我將不勝感激......謝謝,山姆。 – 2013-04-24 14:07:01

+0

這是我做的.....但是PRXCHANGE沒有取代價值...我不知道我在做什麼錯誤...數據Turned_PRX; 設定電流; /*保留re; IF _N_ = 1 THEN; */ rp = PRXPARSE(「/ \^f \('(\ w *?)'\)\^/」); rm = prxmatch(rp,當前);如果rm ne 0,則具有= prxposn(rp,0,當前); if rm ne 0 then need = prxposn(rp,1,currently); if rm ne 0 then exchange = PRXCHANGE('s/rp/need /',-1,currently); 跑; – 2013-04-24 14:17:13

+0

Sampath,在這個問題上有很多文件。我建議使用PRXPOSN,因爲它使用捕獲組,但PRXCHANGE很好。請隨時回來併發布具體問題;如果你將它們標記爲'正則表達式',那麼你將得到正則表達式人士以及SAS人員的幫助。 – Joe 2013-04-24 14:21:40

相關問題