楼主: dxystata
3748 19

[问答] 如何识别macro变量值的位置? [推广有奖]

11
webgu 发表于 2013-12-28 17:13:23 |只看作者 |坛友微信交流群
dxystata 发表于 2013-12-28 09:46
%findpositon(3 44 5,4 )
结果不对!
我考虑过于简单了。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

12
webgu 发表于 2013-12-28 18:05:04 |只看作者 |坛友微信交流群
yongyitian 发表于 2013-12-28 10:17
Try this
%macro findpositon(source, target);
        %let pos1=%sysfunc(findw(%sysfunc(compbl(&source)),&target));               
        %let pos2=%sysfunc(ifc(%sysfunc(mod(&pos1,2))=0,  %eval(&pos1/2), %eval((&pos1+1)/2)));  
        %put  The postion is &pos2;
%mend;

%findpositon(3 44 5,4 )
%findpositon(3 4 5,5 )
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

13
webgu 发表于 2013-12-28 18:07:27 |只看作者 |坛友微信交流群
Eternal0601 发表于 2013-12-28 10:52
%macro test(aaa=,bbb=);
%let indicator=%sysfunc(indexw(&aaa.,&bbb.));
%if %eval( &indicator gt 0 ...
可以更简单一些。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

14
Eternal0601 发表于 2013-12-28 19:29:04 |只看作者 |坛友微信交流群
webgu 发表于 2013-12-28 18:07
可以更简单一些。
%findpositon(3 444 5 55,55 )
这个貌似不行

使用道具

15
webgu 发表于 2013-12-28 20:15:53 |只看作者 |坛友微信交流群
Eternal0601 发表于 2013-12-28 19:29
%findpositon(3 444 5 55,55 )
这个貌似不行
试试这个,核心代码只有一行。
  1. %macro findpositon(source, target);
  2.         %let pos=%sysfunc(findw(%sysfunc(compbl(&source)),&target," " ,E));               
  3.         %put  The position is  &pos ;
  4. %mend;

  5. %findpositon(3 4 5,5 )
  6. %findpositon(3 4444 5,5)
  7. %findpositon(3 444 5 55,55 )
复制代码
已有 3 人评分经验 学术水平 热心指数 信用等级 收起 理由
yongyitian + 1 + 1 + 1 精彩帖子
dxystata + 100 + 3 + 3 好的意见建议
Eternal0601 + 3 + 3 + 3 精彩帖子

总评分: 经验 + 100  学术水平 + 7  热心指数 + 7  信用等级 + 4   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

16
Eternal0601 发表于 2013-12-28 20:34:58 |只看作者 |坛友微信交流群
webgu 发表于 2013-12-28 20:15
试试这个,核心代码只有一行。
这个不错,findw的modifier很强悍

使用道具

17
dxystata 发表于 2013-12-28 20:41:03 |只看作者 |坛友微信交流群
webgu 发表于 2013-12-28 20:15
试试这个,核心代码只有一行。
谢谢webgu版主,我一直认为有简单的方法,用循环太麻烦啦!终于出现啦!

使用道具

18
webgu 发表于 2013-12-28 20:43:40 |只看作者 |坛友微信交流群
Eternal0601 发表于 2013-12-28 20:34
这个不错,findw的modifier很强悍
你考虑的比较周全。学习了。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

19
webgu 发表于 2013-12-28 20:44:24 |只看作者 |坛友微信交流群
dxystata 发表于 2013-12-28 20:41
谢谢webgu版主,我一直认为有简单的方法,用循环太麻烦啦!终于出现啦!
大家一起努力的结果。呵呵。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

20
Tigflanker 发表于 2014-9-29 15:33:21 |只看作者 |坛友微信交流群
  1. %let aaa= 3  4  5;
  2. %let bbb=4;

  3. %put %sysfunc(whichc(&bbb.,%sysfunc(tranwrd(%sysfunc(compbl(&aaa.)),%str( ),%str(,)))));
复制代码

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 11:59