簡體   English   中英

在SAS(DI)中動態注冊表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM