楼主: harlon1976
4619 14

请教这个程序 [推广有奖]

  • 2关注
  • 27粉丝

版主

院士

54%

还不是VIP/贵宾

-

威望
1
论坛币
33781 个
通用积分
135.1232
学术水平
25 点
热心指数
39 点
信用等级
17 点
经验
59249 点
帖子
1928
精华
0
在线时间
4352 小时
注册时间
2005-8-27
最后登录
2025-12-9

楼主
harlon1976 发表于 2011-7-22 09:52:13 |AI写论文
50论坛币
%macro mm;
proc iml;
x={4, 6, 7,5 ,6,7,3,8,2,3};
sum=5;
y=j(sum,1,0);
%do i=1 %to ∑
y[&i]=x[&i];
%end;
print y;
quit;%mend mm;
%mm;run;
这个程序是错的,日志窗口显示:WARNING: 没有解析符号引用 SUM。
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: &sum
ERROR: %TO 值(%DO I 循环中)无效。
ERROR: 宏 MM 将终止执行。
我知道是SUM的问题,它不是宏变量,如何把他转换成宏变量,以便在%do i=1 %to  ∑中使用呢?
当然这里不用宏也是可以的,只要修改为do i=1 to sum;y[&]=x;end;也是可以的,但现在我关心的是如何把SUM转换成宏变量,请高手赐教。

最佳答案

ntsean 查看完整内容

在 sum=5 后面加上这么一句 call symput("sum",char(sum)); 就可以了
关键词:warning Error Macro print Warn 请教 程序

本帖被以下文库推荐

沙发
ntsean 发表于 2011-7-22 09:52:14
在 sum=5 后面加上这么一句

call symput("sum",char(sum));

就可以了

藤椅
wangyf0218 发表于 2011-7-22 09:57:43
好多论坛币。。。
用宏变量定义sum不就好了。。。

板凳
harlon1976 发表于 2011-7-22 10:04:20
你还是没有弄懂我的意思,实际上这个程序是我的某个程序一个部分,变量SUM是事前不知道,通过前面的程序计算出来的,不能事前制定,所以才有这个问题,在后续的程序中,怎样把SUM转换成宏变量。

报纸
wangyf0218 发表于 2011-7-22 10:12:18
%macro mm;
data _null_;
sum=.....用来计算sum;
call symput('sum',sum);
run;

proc iml;
x={4, 6, 7,5 ,6,7,3,8,2,3};
y=j(&sum.,1,0);
%do i=1 %to ∑
y[&i]=x[&i];
%end;
print y;
quit;%mend mm;
%mm;run;

如果是在iml里面计算sum,我再研究研究。。

地板
wangyf0218 发表于 2011-7-22 10:14:13
不知道你sum的计算公式是啥,想怎么计算

7
harlon1976 发表于 2011-7-22 10:22:05
这个SUM的计算比较麻烦,但你只要知道这是IML中某步计算得到的一个中间数值,比如6就可以了,我就想知道如何在IML中实现转换为宏变量。
IML中好像不能使用函数symput。不知道IML中是否有类似功能的这个函数。

8
wangyf0218 发表于 2011-7-22 10:30:01
那个不是只能用于data步么。。。

9
wangyf0218 发表于 2011-7-22 10:32:06
我建议不要使用宏了,直接用循环挺好的。。。。
iml做矩阵的处理很方便啊
看看其他人有没有什么办法

10
harlon1976 发表于 2011-7-22 10:36:32
因为后续程序还要用到SUM,且必须是宏的形式,没有办法啊!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 06:42