程序已经解决了,按照自己期望的方式,不过实话说自己对内部执行略不清晰。
- %macro x;
- |1 AAA
- |1.1 AAAaaa99bb
- |1.2 AAAbbb 98 cc
- |3 BBB
- |3.2 BBB1
- |3.5 BBB2
- |10 CCC 2 3 4 5.67 888
- %mend;
- %let prx = %sysfunc(prxparse(s/(?<=\|)(\d+)/%nrstr(%eval(\1+10))/));
- %put %sysfunc(prxchange(&prx.,-1,%x));
首先%nrstr使得%eval在所在函数中延迟执行,此时prxparse先行编译,将 \1 还原成缓冲区抓取的数值
其次%nrstr再将结果加和,直到prxchange实施。
总结一下应该是这么个模式:
1. 抓取缓冲区 2. 缓冲区值释放 3. %eval更新整个正则表达式值 4. prxparse编译储存
不知这样理解对吗?



雷达卡




京公网安备 11010802022788号







