2016-08-22 39 views
0

假设的某些部分我有一个宏变量如下删除表达

%let var=a b(ref='aaa') c d(ref='zzz'); 

我想删除一切括号括起来,以获得结果a b c d。我应该如何以优雅的方式去做这件事?

+0

我不觉得有优雅的方式这样做。您应该找到openinig括号,然后结束一个,然后使用其他SAS函数来操作类似'substr'或'tranwrd'函数的字符串来替换它。你有尝试过什么吗? – fl0r3k

回答

1

正则表达式可以解决这个问题,看看这个:

%let var=a b(ref='aaa') c d(ref='zzz'); 
data _null_; 
    x=prxchange("s/\([^)]*\)//",-1,"&var"); 
    put x=; 
run; 

日志显示:

x=a b c d 
+1

谢谢你,我正在寻找的东西!为了完整性,为了能够在宏内部使用答案,我必须修改它为:'%sysfunc(prxchange(%str(s/\%([^%)] * \%)//), - 1, “&VAR”));' –