楼主: winwin2013
1239 3

[问答] 求助一个macro的问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

17%

还不是VIP/贵宾

-

威望
0
论坛币
1348 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1107 点
帖子
78
精华
0
在线时间
98 小时
注册时间
2013-7-7
最后登录
2018-12-29

楼主
winwin2013 发表于 2015-12-3 22:26:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
%macro m1(dsn);
%let b = %scan(&dsn,1,',');
%put &b;
%mend m1;
%m1(123,456)

%macro m1(dsn);
%let b = %scan(%str(&dsn),1,',');
%put &b;
%mend m1;
%m1(123,456)

为什么以上两种方法都不能正常打印出b哪?问题在哪里?求教。


二维码

扫码加我 拉你入群

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

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

关键词:Macro acr CRO Mac scan

沙发
soporaeternus 发表于 2015-12-4 10:58:58
  1. %macro m1(dsn);
  2. %let b = %scan(&dsn,1,',');
  3. %put &b;
  4. %mend m1;
  5. %let a=%str(123,456,789);
  6. %m1(&a);
  7. %m1(%str(123,456,789));
复制代码

macro解析的顺序

藤椅
extension 发表于 2015-12-4 11:44:41
%m1(123,456)里,SAS把123和456当作两个位置参数了。解决办法是把程序中的分隔符换掉,例如:
%macro m1(dsn);
%let b = %scan(&dsn,1,'|');
%put &b;
%mend m1;
%m1(123|456)

板凳
Tigflanker 发表于 2015-12-4 15:16:58
  1. %macro m1(dsn);
  2. %let b = %scan(&dsn,1,%str(,));
  3. %put &b;
  4. %mend m1;
  5. %m1(%str(123,456));
复制代码
你在参数指定的时候,逗号会被认作是参数分隔符。

不过我也不是极其清楚,为什么scan第一位参数有时不用%bquote也可以

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

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