看板 Statistics 關於我們 聯絡資訊
[軟體程式類別]: 入軟體程式類別 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
ASD332:宣告值域? java是用public or private,SAS> %Global,%Local 07/30 16:08
Maninck:耶耶~~寫出來了~~感謝^^ 就如你所說的前面加一個宣就好了 07/30 16:32
Maninck:另外再請教一個問題,這可以有回傳值嗎?例:回傳一個DATA 07/30 17:37
Maninck:在macro bb裡面的SET abc 那邊我想要做的是接aa組好的DATA 07/30 17:39
Maninck:如果不知道aa裡面的DATA叫abc,那我bb要怎麼寫? 07/30 17:40
ASD332:不太懂你說的不知道DATA的名字?就算寫方法(or function) 07/31 00:51
ASD332:不也需要呼叫你自己定義的名稱嗎? 07/31 00:51
※ 編輯: Maninck 來自: 118.168.90.166 (07/31 09:55)
Maninck:我指的是綠色那個檔名,因為我現在知道aa裡面的Data叫abc 07/31 09:56
Maninck:所以我在bb裡面就set abc給他,但在不知道aa裡面的名稱時 07/31 09:57
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)
tew:出錯是必然的 你在set甚麼樣的東西呢? 把%aa帶進去 07/31 20:25
Maninck:我希望是set macro aa跑出來的data abc,所以才在想macro 07/31 20:39
Maninck:aa要怎麼樣才可以回傳data abc出來? 07/31 20:40
Maninck:還是說~~macro無法像java一樣可以return一個物件或字串QQ 07/31 20:42
Maninck:我在網路上有查到如何回傳字串,但就是查不到回傳一個data 07/31 20:43