SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 655|回复: 4
打印 上一主题 下一主题

求教:宏里面怎么使用数组的维数?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-2-2 22:16:12 | 只看该作者

求教:宏里面怎么使用数组的维数?

%macro aaaa();
data a;
array new{4} score1-score4;
%do i=1 %to dim(new) %by 1;
   new{i}=10;
%end;

proc print data=a;
run;
%mend aaaa;
%aaaa();

输出错误:
MPRINT(AAAA):   array new{4} score1-score4;
[color=#FF0000:a1essc2e][color=#FF0000]ERROR: Required operator not found in expression: dim(new)
ERROR: The %TO value of the %DO I loop is invalid.
ERROR: The macro AAAA will stop executing.[/color:a1essc2e][/color]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-2-2 22:27:00 | 只看该作者

Re: 求教:宏里面怎么使用数组的维数?

建议把%do loop的%去掉,按上下文来看这只是一个base language下的do loop
%do i=1 %to dim(new) %by 1;
new{i}=10;
%end;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-2-2 22:37:51 | 只看该作者

Re: 求教:宏里面怎么使用数组的维数?

这不是原始问题,这是原始问题的简化版本,dim函数必须在一个宏里面使用,那应该怎么做呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-2-3 08:30:24 | 只看该作者

Re: 求教:宏里面怎么使用数组的维数?

建议不要用数组了。直接使用宏变量序列,然后计算得出宏变量个数之后,再进行宏循环。例如下例,注意这也只是个解决方案的例子,希望对你有帮助。
[code:16mwj2o8]data raw(drop=i);
        do i=1 to 5;
                score1=1;
                score2=2;
                score3=3;
                score4=4;
                output;
        end;
run;

%macro example;

proc contents data=raw out=raw_var noprint;
run;
proc sort data=raw_var;
by varnum;
run;

data _NULL_;
        set raw_var end=eof;
        call symput('var'||trim(left(put(_N_,best.))),trim(left(name)));
        if eof then call symput('varno',trim(left(put(_N_,best.))));
run;
%put &&var&varno;

data tmp;
        set raw;
        %do j=1 %to &varno;
                &&var&j=10;
        %end;
        output;
run;
       
%mend example;

%example
[/code:16mwj2o8]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-2-3 10:02:13 | 只看该作者

Re: 求教:宏里面怎么使用数组的维数?

不了解你的应用,但是如果能写score1-score4,是不是可以考虑把4做为宏参数
[code:k4obl111]%macro aaaa(array_n);
        data a;
                array new{*} score1-score&array_n;
                %do i=1 %to &array_n %by 1;
                        new{&i}=10;
                %end;
        run;

        proc print data=a;
        run;
%mend aaaa;

%aaaa(4);[/code:k4obl111]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-6 09:49 , Processed in 0.082580 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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