楼主: 乐天天12300
1040 8

[问答] 求教关于%str问题 [推广有奖]

  • 0关注
  • 3粉丝

已卖:352份资源

讲师

96%

还不是VIP/贵宾

-

威望
0
论坛币
4875 个
通用积分
360.1222
学术水平
60 点
热心指数
70 点
信用等级
42 点
经验
9962 点
帖子
243
精华
0
在线时间
1004 小时
注册时间
2016-11-28
最后登录
2025-5-3

楼主
乐天天12300 发表于 2023-1-11 21:56:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
为什么下面的语句加了%str后就会报错。
%let a=ogeong nogneong;

/*1*/
%let b=%scan(&a.,1,%bquote( ));
/*2*/
%let b=%str(%scan(&a.,1,%bquote( )));


二维码

扫码加我 拉你入群

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

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

关键词:Quote scan let GEO NEO

已有 1 人评分经验 论坛币 学术水平 收起 理由
whymath + 12 + 12 + 5 鼓励积极发帖讨论

总评分: 经验 + 12  论坛币 + 12  学术水平 + 5   查看全部评分

沙发
橙红的果士 学生认证  发表于 2023-1-13 15:05:24
加%str的目的是什们呢?
如果是为了把对字符串的处理程序赋给b的话,可以考虑这样:
  1. %let b=%str(scan(&a.,1,%bquote( )));
  2. %put &b.;
复制代码

藤椅
nightmeal 发表于 2023-1-13 15:09:32
报错信息有吗?

板凳
乐天天12300 发表于 2023-1-13 16:50:53
nightmeal 发表于 2023-1-13 15:09
报错信息有吗?
4329  %let a=ogeong nogneong;
4330
4331  /*1*/
4332  %let b=%scan(&a.,1,%bquote( ));
4333  /*2*/
4334  %let b=%str(%scan(&a.,1,%bquote( )));
ERROR: 宏函数 %SCAN 的参数过少。

版本9.4 M1

报纸
乐天天12300 发表于 2023-1-13 16:51:52
橙红的果士 发表于 2023-1-13 15:05
加%str的目的是什们呢?
如果是为了把对字符串的处理程序赋给b的话,可以考虑这样:
我想弄清楚错误的机制

地板
nightmeal 发表于 2023-1-17 10:35:12
%str是在编译宏变量的时候起作用,就是在%str(%scan(&a.,1,%bquote( )))里,sas理解%scan(&a.,1,%bquote( ))只是串字符,不认为&a.是在调用宏变量,自然会出现缺少变量提示;%bquote是执行函数,没有特殊符号的话,这里没有作用,放在这个参数位置感觉本来也不太对

7
nightmeal 发表于 2023-1-17 10:40:56
查了下sashelp,%str对于括号的编译不是成对的,就是%scan(&a.,1,%bquote( ))里的括号sas不认为是匹配的,都是当作字符串处理的

8
whymath 发表于 2023-1-17 13:50:37
首先,若删除 %bquote() 函数,该错误仍然存在:
1.png
因此,可暂时排除对 %bquote() 函数的怀疑。

查询帮助文档,了解到 %str() 函数在宏程序编译时,可对 "," 产生屏蔽作用。于是怀疑是 %str() 函数对逗号产生了屏蔽,使其在编译时,没有被解析为 %scan() 函数的参数分隔符。尝试另几个函数如下:
带多个参数的 %substr()
2.png

带多个参数的 %index()
3.png

带单个参数的 %upcase()
4.png

注意到当宏函数带多个参数时,SAS均报告了语法错误,而带单个参数时,则没有语法错误。至此,方才的假设成立:
%str() 函数对其内的逗号产生了屏蔽,在编译时,其内的逗号没有被解析为函数的参数分隔符。
查看我的精华帖:免费的 SAS 软件

9
乐天天12300 发表于 2023-1-18 10:07:06
whymath 发表于 2023-1-17 13:50
首先,若删除 %bquote() 函数,该错误仍然存在:

因此,可暂时排除对 %bquote() 函数的怀疑。
非常感谢

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

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