[英]Dynamically register tables in SAS (DI)
每天都會生成帶有交易數據的表,日期的名稱為data_01_12_2014
。 顯然為什么不希望使用這種方法,但是大概是因為日間餐桌很大,這是一種空間管理機制。 不管是什么原因,我的任務是從這些表中獲取數據,進行一些轉換,然后將結果放入結果表中。
我的問題是我想使流程自動化,並且不想每天手動注冊新的每日表。 有沒有辦法在SAS / SAS DI中自動執行此過程?
非常感謝。
我要做的是創建一個宏變量,並將其值設置為“ 01_12_2014”。 然后,您可以在物理名稱為“ libref.Data_&datevar”的DI Studio中注冊該表。 邏輯名稱可以是任何東西。 現在,只需更改“ datevar”宏變量的值,相同的作業就可以使用新名稱。
在自動執行程序中,可以編寫一個程序來動態設置宏變量。 例如,這會將值設置為今天的日期:
data _null_;
call symputx("datevar",translate(put(today(),DDMMYYD10.),"_","-"));
run;
%put &datevar;
希望這可以幫助!
我希望我回答這個問題不會太晚。 只是今天才看到這個問題。
無論如何,您需要記住的最重要的事情是,顯示在元數據文件夾/清單上的注冊表只是物理文件的快捷方式。 假設您擁有的DI Studio作業正在從該表中獲取輸入(已在元數據服務器上注冊,例如,MYDATA指向10月30日的物理文件data_2015_10_30)。
在10月31日,我可以運行以下代碼來更新指向第31個數據集的快捷方式,即data_2015_10_31。 tableID宏值是在“基本屬性”面板中顯示的表的元數據ID(如果未顯示,請選中“查看”->“基本屬性”。它應該開始顯示在左下方屏幕上)。 另外,我正在對2015_10_31進行硬編碼,但是您可以使用宏來獲取今天的日期,而不是對硬編碼進行編碼。 留給你。
%let tableID=A5LZW6LX.BD000006;
data _null_;
rc=metadata_setattr("omsobj:PhysicalTable?@Id ='&tableID'",
"SASTableName",
"DATA_2015_10_31");
rc=metadata_setattr("omsobj:PhysicalTable?@Id ='&tableID'",
"TableName",
"DATA_2015_10_31");
run;
請注意,當您進行更改或運行上述代碼時,可以打開或關閉DI STUDIO作業,但如果先打開然后再將其關閉並重新打開,並且如果作業已關閉,則只需打開它即可。 如果您不重新打開作業然后在JOB TRANSFORMATIONS其與數據集交互MYDATA仍然PICK UP舊表名而非更新的。 另外,由於打開作業正在將數據集的所有鏈接更新到轉換中的新物理表,即DI作業中的10月31日,因此不能將上述代碼添加為Precode。 您可以使用上面的代碼創建一個新作業,並將其添加到作業流程中以在主作業之前運行。 如果您想將其添加到預代碼中,則要更新的代碼將變得復雜而冗長,我會避免這樣做。
良好參考鏈接: http : //support.sas.com/resources/papers/proceedings09/097-2009.pdf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.