SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1032|回复: 7
打印 上一主题 下一主题

帮忙看一下,问题在哪里?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-11-1 15:06:10 | 只看该作者

帮忙看一下,问题在哪里?

%macro rate(type,promise,money,yeartime);
%global rate  tax_rate;
proc sql;
select rate , tax_rate
into : rate ,:tax_rate
from bank_rate as n
where &promise eq n.promise and &type=n.type;
%let rate=&rate ;
%let tax_rate=&tax_rate;
%current_money(&rate,&tax_rate,&money,&yeartime)
%mend rate;
说明:在rate里面,产生的宏变量rate和tax_rate。我想把它们放到嵌套的宏current_money里面作为参数。
上面程序为何不行,怎么老是报错?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-11-2 09:38:25 | 只看该作者

Re: 帮忙看一下,问题在哪里?

你提交代码片段本身看不出什么问题,把错误代码贴上来,看看是不是其他地方的错误而导致的呢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-11-2 18:44:22 | 只看该作者

Re: 帮忙看一下,问题在哪里?

proc sql; select rate , tax_rate into : rate ,:tax_rate from bank_rate as n where &promise eq
      ----             ---- -
      180              395  200
                       76
1  ! n.promise and &type=n.type; %current_money(&rate,&tax_rate,&money,&yeartime)
NOTE: Line generated by the invoked macro "CURRENT_MONEY".
1     interest=&money*&current_rate*&yeartime; gain=interest*(1-&tax_rate); current_money=&money+gain;
                                                                         -
                                                                         22
ERROR 180-322: Statement is not valid or it is used out of proper order.

ERROR 395-185: Opening parenthesis for SELECT/WHEN expression is missing.

ERROR 200-322: The symbol is not recognized and will be ignored.

ERROR 76-322: Syntax error, statement will be ignored.

ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string,
              a numeric constant, a datetime constant, a missing value, INPUT, PUT.
不好意思,错误提示比较多。谢谢各位了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-11-2 22:23:38 | 只看该作者

Re: 帮忙看一下,问题在哪里?

多了一个分号。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-11-3 14:10:37 | 只看该作者

Re: 帮忙看一下,问题在哪里?

调用函数current_money是后面少一个分号,而且后面两个%let也不必要
[code:6u37x4vt]%macro rate(type,promise,money,yeartime);
%global rate tax_rate;
proc sql;
     select rate , tax_rate into :rate, :tax_rate
     from bank_rate as n
     where &promise eq n.promise and &type=n.type;
%current_money(&rate,&tax_rate,&money,&yeartime);
%mend rate;
[/code:6u37x4vt]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-11-3 14:22:44 | 只看该作者

Re: 帮忙看一下,问题在哪里?

[quote="horse1":1x5o9wck]调用函数current_money是后面少一个分号,而且后面两个%let也不必要
[/quote:1x5o9wck]
the semicolon after a macro invocation is not mandatory according to the book, but I found it cannot be omitted sometimes. Do you have a general rule or do you just play defensive by placing a semicolon there all the time?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2008-11-3 15:35:09 | 只看该作者

Re: 帮忙看一下,问题在哪里?

Yes, I always palce a semicolon there to avoid errors
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2008-11-3 23:37:53 | 只看该作者

Re: 帮忙看一下,问题在哪里?

感谢上面二位。我终于把我的程序写完了。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 03:29 , Processed in 0.126299 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表