楼主: 邢不行
5588 8

[原创博文] 关于call symput的问题——为什么赋值字符变量时会出问题 [推广有奖]

已卖:1906份资源

院士

10%

还不是VIP/贵宾

-

威望
1
论坛币
26755 个
通用积分
155.8944
学术水平
489 点
热心指数
509 点
信用等级
460 点
经验
53138 点
帖子
585
精华
26
在线时间
1199 小时
注册时间
2010-4-30
最后登录
2025-12-31

楼主
邢不行 在职认证  发表于 2011-10-23 17:35:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我想做的事情是遍历数据集A,根据某个条件挑选出A中满足条件的观测(满足条件的观测肯定只有一个),
然后将这个观测中的几个变量通过call symput赋值给宏变量。如:call symput('preclose',preclose);将观测中变量preclose的值赋值给宏变量preclose
然后用stop语句退出对A的遍历。

然后想在新的数据集B中写入那几个导出的宏变量,并输出形成只有一条观测的数据集B。
程序如下:
(我知道要实现上面的功能根本可以不用宏,其他很简答的方法就可以实现,但是我就想这么做)



  1. data _null_;
  2. set a;
  3.         if (某个条件) then do;
  4.             call symput('preclose',preclose);
  5.         call symput('zf',zf);
  6.             call symput('pb',pb);
  7.         stop;
  8. end;
  9. run;

  10. data yu.r;
  11. preclose=&preclose;
  12. zf=&zf;
  13. pb=pb;
  14. output;
  15. run;
复制代码
现在的问题是,如果我从数据集A中赋值给宏变量的是数值型的变量,那么就能顺利的实现我想做的事情,但是如果我从数据集A中赋值给宏变量的是字符型的变量,那么就会出现问题,
在运行到第一个data步的时候,程序会报出如下错误:

data yu.r;     preclose=&preclose;
ERROR: “新兴铸管”不是有效的 SAS 名称。
ERROR: “新兴铸管”不是有效的 SAS 名称。
ERROR: “新兴铸管”不是有效的 SAS 名称。
9   + zf=&zf;    pb=&pb;     output; run;

NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 YU.R 可能不完整。该步停止时,共有 0 个观测和 3 个变量。
WARNING: 数据集 YU.R 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.03 秒
      CPU 时间          0.03 秒


其中 “新兴铸管”就是赋值给preclose的变量的值,但是sas好像将他认为是一个变量名,不知道为什么。

求各位大神指导,谢谢。
二维码

扫码加我 拉你入群

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

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

关键词:symput 字符变量 call put warning null 程序

沙发
YueweiLiu 发表于 2011-10-23 18:03:53
如果是字符型变量,在赋值的时候,要加 双引号,否则sas会以为是变量名。

藤椅
YueweiLiu 发表于 2011-10-23 18:04:16
  1. preclose="&preclose";
复制代码

板凳
干将锋莫邪 发表于 2011-10-23 20:15:18
这个就不是专业范围了!

报纸
邢不行 在职认证  发表于 2011-10-23 21:52:05
YueweiLiu 发表于 2011-10-23 18:04
真是谢谢啊 一下子就解决了问题 万分感谢!

还想问一下...你是怎么知道的呢?
不管去哪里 只要在路上

地板
YueweiLiu 发表于 2011-10-23 22:14:25
邢不行 发表于 2011-10-23 21:52
真是谢谢啊 一下子就解决了问题 万分感谢!

还想问一下...你是怎么知道的呢?
这是最基本的东西吧。。

7
邢不行 在职认证  发表于 2011-10-23 22:36:39
YueweiLiu 发表于 2011-10-23 22:14
这是最基本的东西吧。。
好吧...
虽然感觉有点受打击..呵呵
继续努力
不管去哪里 只要在路上

8
jingju11 发表于 2011-10-24 02:58:34
老师和学生都非常感人。京剧

9
YueweiLiu 发表于 2011-10-25 14:27:32
邢不行 发表于 2011-10-23 22:36
好吧...
虽然感觉有点受打击..呵呵
继续努力
呵呵。 不是有意的, 继续努力。

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

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