我已經在我的本地機器上創建了一個.sas文件中的宏。我也有一個已經用來測試宏的本地數據集。該數據集與遠程數據集具有相同的描述符,但只有較少的觀察值。現在,我正試圖運行我的本地宏對遠程數據集。這基本上是我有:在RSUBMIT塊中調用本地SAS宏?
這按預期工作:
%include "C:\my_sas_macro.sas";
%my_sas_macro(my_data=work.localdata)
但隨後這會產生一個錯誤(錯誤如下):
%include "C:\my_sas_macro.sas";
rsubmit;
%my_sas_macro(my_data=remotelib.remotedata)
endrsubmit;
日誌,錯誤:
125 %include "C:\my_sas_macro.sas";
136
137 rsubmit;
NOTE: Remote submit to REMOTEID.__7551 commencing.
WARNING: Apparent invocation of macro MY_SAS_MACRO not resolved.
83 %my_sas_macro(my_data=remotelib.remotedata)
-
180
ERROR 180-322: Statement is not valid or it is used out of proper order.
84 endrsubmit;
NOTE: Remote submit to REMOTEID.__7551 complete.
我很確定我需要以某種方式將%宏/%修補塊轉移到服務器,但我無法確定如何。我已經看到%SYSLPUT
,但這是宏變量而不是完整的宏。
無論如何,我可以在服務器上運行我的宏,而不必通過代碼SSH和%include
那裏嗎?
謝謝!
[編輯]實施的解決方案
因此,基於@ CarolinaJay65的答案,我想出了下面的宏這是迄今爲止的工作非常適合我。
%macro include_on_server(file=);
%let server_file = ~/temp.sas;
%SYSLPUT macro_file=&file;
%SYSLPUT server_file = &server_file;
rsubmit;
proc upload
infile= "¯o_file."
outfile= "&server_file."
; run;
%include "&server_file.";
endrsubmit;
%mend include_on_server;
這使我只是叫%include_on_server(file="C:\my_file.sas")
,然後它現在包含在我的遠程會話。
謝謝,我會請檢查'Proc Upload;'爲了完整性,您能否展示「將整個宏指定給宏變量」的正確方法? –
謝謝,這適用於我,但它是一種PITA,因爲我必須管理服務器上的目錄結構(它不會自動創建不存在的目錄)。除非有其他解決方案出現,否則我會將其保留爲接受答案,這不需要我管理服務器端的文件。 –
我想添加endrsubmit;最後要說清楚,所有的都是遠程執行的。 – vasja