作者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