楼主: dxystata
3752 19

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

版主

大师

34%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
182304 个
通用积分
15205.6031
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
291157 点
帖子
5375
精华
1
在线时间
13478 小时
注册时间
2006-6-21
最后登录
2024-4-26

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
%let aaa=3 4 5;
%let bbb=4;
有什么简单的办法得到bbb在aaa中的位置赋值给ccc?
如果bbb为3 其位置为1
           为4 其位置为2
           为5 其位置为3

谢谢!



二维码

扫码加我 拉你入群

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

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

关键词:Macro Mac CRO acr 变量值 如何

本帖被以下文库推荐

沙发
soporaeternus 发表于 2013-12-26 16:52:19 |只看作者 |坛友微信交流群
%scan?
已有 1 人评分经验 热心指数 收起 理由
dxystata + 20 + 1 好的意见建议

总评分: 经验 + 20  热心指数 + 1   查看全部评分

Let them be hard, but never unjust

使用道具

藤椅
Eternal0601 发表于 2013-12-26 22:41:52 |只看作者 |坛友微信交流群
%macro test;
%let aaa=3 4 5;
%let bbb=4;
%let indicator=%sysfunc(indexw(&aaa.,&bbb.));
%if %eval( &indicator gt 0) %then %do;
        %let i=%sysfunc(countw(&aaa,%str( )));
        %put &i.;
        %do j=1 %to &i.;
                %if %qscan(&aaa., &j.,%str( ))=&bbb. %then %do; %let ccc=&j.; %put ccc=&ccc.; %end;
        %end;
%end;
%mend test;

%test
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 40 + 1 + 1 好的意见建议

总评分: 经验 + 40  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

板凳
Eternal0601 发表于 2013-12-26 22:43:32 |只看作者 |坛友微信交流群
Eternal0601 发表于 2013-12-26 22:41
%macro test;
%let aaa=3 4 5;
%let bbb=4;
这里面有比较tricky的地方,如果aaa为3 4 4,bbb为4的话,返回的值是3,而不是2,你自己可以根据需要再改下

使用道具

报纸
playmore 发表于 2013-12-27 13:12:52 |只看作者 |坛友微信交流群
用FIND函数就好了
已有 1 人评分经验 热心指数 收起 理由
dxystata + 40 + 1 好的意见建议

总评分: 经验 + 40  热心指数 + 1   查看全部评分

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

地板
dxystata 发表于 2013-12-27 17:21:59 |只看作者 |坛友微信交流群
playmore 发表于 2013-12-27 13:12
用FIND函数就好了
%let aaa=3 4 5;
%let bbb=4;
%put %sysfunc(find(&aaa,&bbb));
结果显示为3,应该为2。


%let aaa=3 44 5;
%let bbb=4;
%put %sysfunc(find(&aaa,&bbb));
结果显示为3,应该为0。

使用道具

7
webgu 发表于 2013-12-28 09:43:47 |只看作者 |坛友微信交流群
%macro findpositon(source, target);
       %let pos=%sysfunc(find( %sysfunc(compress(&source)),&target));
       %put &pos;
%mend;

%findpositon(3 4 5,4 )
%findpositon(3 4 5,5 )
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 50 + 1 + 1 好的意见建议

总评分: 经验 + 50  学术水平 + 1  热心指数 + 1   查看全部评分

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

使用道具

8
dxystata 发表于 2013-12-28 09:46:13 |只看作者 |坛友微信交流群
webgu 发表于 2013-12-28 09:43
%macro findpositon(source, target);
       %let pos=%sysfunc(find( %sysfunc(compress(&source)),&tar ...
%findpositon(3 44 5,4 )
结果不对!

使用道具

9
yongyitian 发表于 2013-12-28 10:17:37 |只看作者 |坛友微信交流群
Try this
  1. %macro GetPosition(aaa,bbb);
  2.   data _null_;
  3.    length a b $20.;
  4.    a = "&aaa";
  5.    b = "&bbb";
  6.    position = 0;
  7.    do i = 1 to countw(a);
  8.    if scan(strip(a), i) = strip(b) then position = i;
  9.    end;
  10.     put a=   b=  position= ;
  11. run;
  12. %mend GetPosition;
  13. %GetPosition(3 4 5, 4)
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
dxystata + 40 + 1 + 1 好的意见建议
webgu + 40 + 40 + 1 + 1 + 1 这个是最安全的。

总评分: 经验 + 80  论坛币 + 40  学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

使用道具

10
Eternal0601 发表于 2013-12-28 10:52:55 |只看作者 |坛友微信交流群
Eternal0601 发表于 2013-12-26 22:43
这里面有比较tricky的地方,如果aaa为3 4 4,bbb为4的话,返回的值是3,而不是2,你自己可以根据需要再改 ...
%macro test(aaa=,bbb=);
%let indicator=%sysfunc(indexw(&aaa.,&bbb.));
%if %eval( &indicator gt 0) %then %do;
        %let i=%sysfunc(countw(&aaa,%str( )));
        %put &i.;
        %do j=1 %to &i.;
                %if %qscan(&aaa., &j.,%str( ))=&bbb. %then %do; %let ccc=&j.; %put ccc=&ccc.; %goto exit;  %end;
        %end;
%end;
%exit:
%mend test;

%test(aaa=3 4 4,bbb=4)
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
webgu + 40 + 40 + 1 + 1 + 1 Totally MACRO VERSION

总评分: 经验 + 40  论坛币 + 40  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

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

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

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

GMT+8, 2024-4-26 21:48