全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
8768 10
2011-12-28
如果有下面一段代码,运行是正常的
%let no=5;
%let var&no=10;
%put var5=&&var&no;
结果是var5=10

但如果这个no宏变量不是用%let语句赋值的,而是用select into从一张表里取得的,如下所示
proc sql noprint;
select a into :no from dataseta where n=1;
quit;
然后再用%let var&no=10;这条语句时,会报错
ERROR: Expecting a variable name after %LET.
ERROR: Symbolic variable name VAR       1 must contain only letters, digits, and underscores.
也即在这时,&&var&no为VAR        1,不知道中间这些空格为什么会存在
请问该如何解决,谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2011-12-28 14:08:11
经尝试可以将字符变量强制转换成数值变量然后再使用上诉方法。应该是a变量本身含有空格。compress()去空格.
二维码

扫码加我 拉你入群

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

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

2011-12-28 14:38:28
ywb0314 发表于 2011-12-28 14:08
经尝试可以将字符变量强制转换成数值变量然后再使用上诉方法。应该是a变量本身含有空格。compress()去空格 ...
这个表格里的a变量就是best12.格式的数值变量,应该不包含空格
二维码

扫码加我 拉你入群

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

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

2011-12-28 14:40:46
playmore 发表于 2011-12-28 14:38
这个表格里的a变量就是best12.格式的数值变量,应该不包含空格
z=a||'';会有空格,我就改用z=compress(a||'');。
二维码

扫码加我 拉你入群

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

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

2011-12-28 22:55:29
和我之前问的有些类似...参见

https://bbs.pinggu.org/thread-1167950-1-1.html

除let外,其它方式的宏变量相连时最好还是用compress处理下...经常出现一些问题
二维码

扫码加我 拉你入群

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

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

2011-12-29 09:26:18
chai_prime 发表于 2011-12-28 22:55
和我之前问的有些类似...参见

https://bbs.pinggu.org/thread-1167950-1-1.html
多谢指点

因为我写的是个宏,平时还会有其他的应用来调用这个宏,没有办法让别人使用我这个全局的宏变量时特意加上compress函数,所以还是要改我自己的宏

现在我的作法是先select into出来,然后再用%let a=%sysfunc(putc(&a,10.))转换下。这样就可以把由select into导出的宏变量转化为由%let赋值的宏变量了。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群