我想弄清楚如何使用SAS namedpipes在SAS進程中交換數據。下面是一個簡單的例子:使用namedpipes傳輸ods輸出和數據集
服務器
FILENAME stdout namepipe '\\.\pipe\Sas\PipeOut' server eofconnect retry=15 block;
FILENAME DIRLIST pipe 'dir "C:\atemp"';
data dirlist ;
length buffer $256;
infile dirlist length=reclen;
input buffer $varying256. reclen;
*file stdout;
*put buffer;
ods listing file=stdout;
proc print data=dirlist;
run;
客戶
FILENAME stdin namepipe '\\.\pipe\Sas\PipeOut' client eofconnect retry=15 block;
data d1;
length buffer $ 256;
infile stdin length=reclen;
input buffer $varying256. reclen;
put buffer;
run;
如果服務器代碼我去掉了該文件,並把語句,並刪除ODS和PROC打印,一切都非常按預期工作。現在的代碼產生了我沒有想到的結果。我運行服務器代碼,然後啓動客戶端代碼。客戶端代碼運行,但讀取零觀察值,如果我然後重新運行客戶端代碼(在服務器超時之前),它將讀取60條左右預期的行,然後掛起(從不終止)。我最好的猜測是,ods列表聲明關閉文件,然後重新打開它(並且從不關閉它?)。有沒有人知道發生了什麼,以及如何在第一次執行時在客戶端獲取ods輸出,而沒有掛起?
我想要做的其他事情是將服務器上的數據集輸出到管道並將其用作客戶端中的數據集引用。通常這是使用庫引用完成的,我不知道我是否能夠或如何使管道文件引用看起來像庫引用。希望最後一部分有意義。
非常感謝您的回答。 ods close和額外的輸入步驟處理讀取和掛起問題。我擔心可能無法執行二進制數據集傳輸。我打算把問題留給希望可能成爲一種方式的日子,因爲我想避免寫一個文件。 – Dweeberly
我打算將其標記爲答案。我可能無法以這種方式傳遞(二進制)數據集。其他信息是現貨,並像魅力一樣工作,再次感謝 – Dweeberly