楼主: Tigflanker
4440 2

[学习分享] 关于%scan的一个提醒 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

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

楼主
Tigflanker 发表于 2014-1-24 11:56:21 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. %macro a;
  2. %let a = A||B ;
  3. %do i = 1 %to 3;
  4.   %put &i. = %scan(&a.,&i.,%str(|));
  5. %end;
  6. %mend;%a;
复制代码
不知你是否发现,在用%scan对宏文本进行取值的时候,如果他取到的值是空的,则它会跳过该值的。

如上例,Run出来的结果是

1 = A
2 = B
3 =

而不是:

1 = A
2 =
3 = B

或者如果:%let a = |a|b; 则%scan(&a., 1, %str(|))的结果是a

这是我同事今天发现的,仅作提醒。

新年快乐~

二维码

扫码加我 拉你入群

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

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

关键词:scan Macro 新年快乐 let End

本帖被以下文库推荐

Bye SAS.
若有缘,能重聚。

沙发
zw612003 发表于 2014-1-25 18:44:24
前几天这个帖子里面贴出来解决办法了.
https://bbs.pinggu.org/thread-2870730-1-1.html

试一试.

  1. %macro a;
  2. %let a = A||B;
  3. %let b = %sysfunc(tranwrd( &a.,|,%str( |)));
  4. %do i = 1 %to 3;
  5. %put &i. = %scan(&b,&i.,'|');
  6. %end;
  7. %mend;
  8. %a;
复制代码

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 谢谢,新年快乐~

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
playmore 发表于 2014-1-26 10:59:06
程序改成下面的样子就行了,就加了一个M

%macro a;
%let a = A||B ;
%do i = 1 %to 3;
  %put &i. =%scan(&a.,&i.,%str(|),M);
%end;
%mend;%a;

详见
http://support.sas.com/documenta ... r.htm#z3514scan.htm
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 感谢,9.2的新东西,学习了~

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

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

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-8 19:12