楼主: Tigflanker
2889 1

[问答] 了解prxchange用法和%nrstr原理的朋友可以进来讨论下哈 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.9128
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

楼主
Tigflanker 发表于 2015-8-17 14:06:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
是这样,工作闲余时编写了一个例子,意图是将一大段文字中所有开头的数值加10后再替换回原位置。
程序已经解决了,按照自己期望的方式,不过实话说自己对内部执行略不清晰。
  1. %macro x;
  2. |1 AAA
  3. |1.1 AAAaaa99bb
  4. |1.2 AAAbbb 98 cc
  5. |3 BBB
  6. |3.2 BBB1
  7. |3.5 BBB2
  8. |10 CCC 2 3 4 5.67 888
  9. %mend;

  10. %let prx = %sysfunc(prxparse(s/(?<=\|)(\d+)/%nrstr(%eval(\1+10))/));

  11. %put %sysfunc(prxchange(&prx.,-1,%x));
复制代码
按照我之前对于%nrstr的理解,第一句prxparse应该是这么编译的:

首先%nrstr使得%eval在所在函数中延迟执行,此时prxparse先行编译,将 \1 还原成缓冲区抓取的数值

其次%nrstr再将结果加和,直到prxchange实施。

总结一下应该是这么个模式:

1. 抓取缓冲区 2. 缓冲区值释放 3. %eval更新整个正则表达式值 4. prxparse编译储存

不知这样理解对吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:PrxChange change Hang CHAN sysfunc 朋友 程序

Bye SAS.
若有缘,能重聚。

沙发
Tigflanker 发表于 2015-8-21 14:56:02
求回复啊,求关注;自己默默的顶一下吧。。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 03:12