作者Maninck (我是大天才^o^/)
站内Statistics
标题[程式] SAS MACTRO 变数的问题
时间Sat Jul 30 14:57:55 2011
[软体程式类别]:
入软体程式类别 SAS
[程式问题]:
资料处理
[软体熟悉度]:
新手(不到1个月)
[问题叙述]:
我写了两只程式分别为aa.sas及bb.sas,我想让bb直接呼叫aa的结果存起来。
但目前遇到的一个大问题是,他的变数好像都是共用的
bb里面的变数
k,如果宣告成i,他就会跟aa里的i混乱掉,
不知道能不能让他们同样都是i,但却不会乱掉。
也就是说我想做到像java那样可以模组间的变数不会互相干扰。
[程式范例]:
%MACRO aa (num);
DATA
abc;
%DO i=1 %TO #
%DO j =1 %TO #
col = &i;
row = &j;
muti = &i*&j;
output;
%END;
%END;
RUN;
%MEND;
%INCLUDE 'E:\TEST\source\aa.sas';
%MACRO bb (num);
%DO
k=1 %TO #
%aa(
&k);
DATA tmp
&k;
SET
abc;
RUN;
%END;
%MEND;
-----------------------------------------------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.95.195
1F:→ ASD332:宣告值域? java是用public or private,SAS> %Global,%Local 07/30 16:08
2F:→ Maninck:耶耶~~写出来了~~感谢^^ 就如你所说的前面加一个宣就好了 07/30 16:32
3F:→ Maninck:另外再请教一个问题,这可以有回传值吗?例:回传一个DATA 07/30 17:37
4F:→ Maninck:在macro bb里面的SET abc 那边我想要做的是接aa组好的DATA 07/30 17:39
5F:→ Maninck:如果不知道aa里面的DATA叫abc,那我bb要怎麽写? 07/30 17:40
6F:→ ASD332:不太懂你说的不知道DATA的名字?就算写方法(or function) 07/31 00:51
7F:→ ASD332:不也需要呼叫你自己定义的名称吗? 07/31 00:51
※ 编辑: Maninck 来自: 118.168.90.166 (07/31 09:55)
8F:→ Maninck:我指的是绿色那个档名,因为我现在知道aa里面的Data叫abc 07/31 09:56
9F:→ Maninck:所以我在bb里面就set abc给他,但在不知道aa里面的名称时 07/31 09:57
10F:→ Maninck:我可以用类似DATA tmp&k = &aa(&k);的方式来做吗? 07/31 09:58
像我把bb改成下面,他就会出错
%MACRO bb (num);
%Local i; /*内部使用宣告*/
%DO i=1 %TO #
DATA tmp&i;
SET %aa(&i );
%END;
%MEND;
错误讯息
ERROR: File WORK.DATA.DATA does not exist.
ERROR: File WORK.ABC.DATA does not exist.
※ 编辑: Maninck 来自: 118.168.90.166 (07/31 10:04)
11F:推 tew:出错是必然的 你在set甚麽样的东西呢? 把%aa带进去 07/31 20:25
12F:→ Maninck:我希望是set macro aa跑出来的data abc,所以才在想macro 07/31 20:39
13F:→ Maninck:aa要怎麽样才可以回传data abc出来? 07/31 20:40
14F:→ Maninck:还是说~~macro无法像java一样可以return一个物件或字串QQ 07/31 20:42
15F:→ Maninck:我在网路上有查到如何回传字串,但就是查不到回传一个data 07/31 20:43