请选择 进入手机版 | 继续访问电脑版
楼主: playmore
8277 10

[原创博文] 请问select into至宏变量后引用的问题 [推广有奖]

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16309 个
通用积分
7.0197
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1331 小时
注册时间
2007-1-11
最后登录
2023-12-15

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

playmore 发表于 2011-12-28 13:40:18 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如果有下面一段代码,运行是正常的
%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,不知道中间这些空格为什么会存在
请问该如何解决,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:Select Elect int ele ect

回帖推荐

guoluo 发表于8楼  查看完整内容

加separated by ''

本帖被以下文库推荐

ywb0314 发表于 2011-12-28 14:08:11 |显示全部楼层 |坛友微信交流群
经尝试可以将字符变量强制转换成数值变量然后再使用上诉方法。应该是a变量本身含有空格。compress()去空格.

使用道具

playmore 发表于 2011-12-28 14:38:28 |显示全部楼层 |坛友微信交流群
ywb0314 发表于 2011-12-28 14:08
经尝试可以将字符变量强制转换成数值变量然后再使用上诉方法。应该是a变量本身含有空格。compress()去空格 ...
这个表格里的a变量就是best12.格式的数值变量,应该不包含空格
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

ywb0314 发表于 2011-12-28 14:40:46 |显示全部楼层 |坛友微信交流群
playmore 发表于 2011-12-28 14:38
这个表格里的a变量就是best12.格式的数值变量,应该不包含空格
z=a||'';会有空格,我就改用z=compress(a||'');。

使用道具

chai_prime 发表于 2011-12-28 22:55:29 |显示全部楼层 |坛友微信交流群
和我之前问的有些类似...参见

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

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

使用道具

playmore 发表于 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赋值的宏变量了。
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

chai_prime 发表于 2011-12-30 20:50:48 |显示全部楼层 |坛友微信交流群
playmore 发表于 2011-12-29 09:26
多谢指点

因为我写的是个宏,平时还会有其他的应用来调用这个宏,没有办法让别人使用我这个全局的宏变 ...
是不是可以在开头就定义该变量为全局宏变量,再在赋值时加compress呢....

拙见,最近没写了...不知道是否可行

使用道具

guoluo 发表于 2012-1-1 14:51:52 |显示全部楼层 |坛友微信交流群
  1. data dataseta;
  2. a = 5;
  3. run;

  4. proc sql noprint;
  5. select a into :no separated by ''
  6.   from dataseta;
  7. quit;

  8. %let var&no=10;
  9. %put var5=&&var&no;
复制代码
加separated by ''
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

zw612003 发表于 2014-1-20 22:35:32 |显示全部楼层 |坛友微信交流群
guoluo 发表于 2012-1-1 14:51
加separated by ''
这个可以试一试,我今天也用到了。谢谢

使用道具

牙刷@@ 发表于 2016-6-23 15:00:53 |显示全部楼层 |坛友微信交流群
guoluo 发表于 2012-1-1 14:51
加separated by ''
谢谢 今天遇到了同样的问题

使用道具

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

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

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

GMT+8, 2024-3-28 17:37