2013-04-22 46 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

相关问题