行號,我想打印的行數(從SAS程序文件),當達到一定條件發生。我如何檢索該值並打印出來?SAS - 獲取從代碼文件
我想要做這樣的事情:
%put 'An error occurred on line ' &LINE_NO;
行號,我想打印的行數(從SAS程序文件),當達到一定條件發生。我如何檢索該值並打印出來?SAS - 獲取從代碼文件
我想要做這樣的事情:
%put 'An error occurred on line ' &LINE_NO;
好了,這裏有一個想法。首先用你所有的斷言寫一個.sas文件。每個斷言都是一個宏調用,它有一個行號的佔位符。所以mycode.sas樣子:
data want;
set have;
%assert((x=y), line=_linenumber_)
%assert((a<b), line=_linenumber_)
run;
一旦做到這一點,你寫的另一個SAS程序,讀取mycode.sas和寫入MyCodeWithLineNumbers.sas,它看起來像:
data want;
set have;
%assert((x=y), line=3)
%assert((a<b), line=4)
run;
然後提交MyCodeWithLineNumbers .sas。它不應該是很難寫的程序,通過.sas文件讀取,算上線,並用適當的值替換_linenumber_
。
這是天才!我不敢相信我沒有想到這一點。我仍然希望有一個系統定義的全局變量叫做_LINE_,它可以提供行號。 – bambi
我認爲你將有一個很難做到這一點。即使是SAS,也很難理解行編號,特別是當一行代碼(例如宏調用或調用執行)可以生成許多SAS語句時。好消息是,日誌中的錯誤通常會打印在日誌的相鄰位置。如果你舉了一個你正在提交的代碼類型和你想要的消息的例子,人們可能可以幫助選擇。 – Quentin
感謝您的回覆Quentin。我創建了一個簡單的測試框架,允許我調用一個斷言宏。當其中一個斷言失敗時,我希望將斷言調用的行號打印到日誌中。你知道有什麼辦法做這樣的事嗎?我需要創建我自己的測試框架,因爲我無法安裝任何額外的庫到我的工作中的安全環境中。 – bambi
呃。斷言是我最喜歡的話題。 (http://www.lexjansen.com/nesug/nesug12/cc/cc31.pdf)。我想不出如何打印行號。通常我會打印斷言條件,也可能是輔助變量。可以設想一個計數器來計算被調用的斷言的數量,所以你可以打印斷言#i或其他。但代碼的行號似乎更難。希望別人會有想法。 – Quentin