我想做的事情是遍历数据集A,根据某个条件挑选出A中满足条件的观测(满足条件的观测肯定只有一个),
然后将这个观测中的几个变量通过call symput赋值给宏变量。如:
call symput('preclose',preclose);将观测中变量preclose的值赋值给宏变量preclose
然后用stop语句退出对A的遍历。
然后想在新的数据集B中写入那几个导出的宏变量,并输出形成只有一条观测的数据集B。
程序如下:
(我知道要实现上面的功能根本可以不用宏,其他很简答的方法就可以实现,但是我就想这么做)
现在的问题是,如果我从数据集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好像将他认为是一个变量名,不知道为什么。
求各位大神指导,谢谢。