SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3713|回复: 3
打印 上一主题 下一主题

looking for help for a simple macro code

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2013-10-31 07:57:23 | 只看该作者

looking for help for a simple macro code

%macro pct;
%do i=0 %to 1 %by 0.1 ;
data diff;
  pp=&i.;
run;
%end;
%mend;
%pct

I am trying to get a dataset diff with a row value of pp , however, it gave me error message as displayed below, and  wonder anyone could help.

ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
       0.1
ERROR: The %BY value of the %DO I loop is invalid.

thx a lot!!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2013-10-31 15:21:52 | 只看该作者

Re: looking for help for a simple macro code

[code:13qs2m3k]%macro pct;
    %let i=0;
    %let i=%sysevalf(&i+0.1);
    %do %until(&i gt 1);
        data diff;
            pp=&i.;
        run;
        %let i=%sysevalf(&i+0.1);
    %end;
%mend;
%pct[/code:13qs2m3k]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2013-10-31 22:22:51 | 只看该作者

Re: looking for help for a simple macro code

nice.
but still confused, why SAS treats &i as a character value(pp=&i) in the %do loop?
when we use do loop i.e. i=0 to 10, i was treated as a numeric value.

thx!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2013-11-7 13:51:23 | 只看该作者

Re: looking for help for a simple macro code

语法要求----%by 后面必须是整数。而你用的是小数,所以报错。
解决方法:将等差数列标准化成整数后,方可用%do %to %by。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 08:35 , Processed in 0.131067 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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