簡體   English   中英

SAS是否有宏來格式化用戶寫入DI轉換的輸出?

[英]Does SAS have a macro to format output of user writen DI transformation?

使用SAS數據集成(DI)Studio開發ETL程序時,您指定的每個轉換都有一個用戶界面,用於指定您創建的數據集(=表)的列及其類型,長度和格式。

當現有轉換無法完成工作並且需要用戶編寫代碼時,您應該使用點擊式界面盡可能多地執行此操作,因為

  • 它可以進行影響分析和反向影響分析
  • 你的繼任者可能不會深入研究SAS基本代碼,除非他們真的需要
  • 如果他們需要更改列或其格式,他們希望更改用戶界面中的規范將完成工作

幸運的是,SAS向宏程序變量的用戶編寫轉換的程序員公開了輸出的格式

所以我經常在用戶編寫的轉換中編寫我的代碼

%macro format_output(data);
    %do _col = 0 %to  &&&data._col_count - 1; 
        length &&&data._col&_col._name &&&data._col&_col._type&&&data._col&_col._length;
        %if %length(&&&data._col&_col._format) %then %do;
            format &&&data._col&_col._name &&&data._col&_col._format;
        %end;
    %end;
%mend;

data &_OUTPUT1 (keep=&_OUTPUT1_keep);   
    %format_output(_OUTPUT1);
    set &_INPUT1;

    * actua code ;
run;

SAS是否提供嵌入式宏或某些東西來做同樣的事情?

對於完整性:SAS公開輸出結構的方式如下

%let _OUTPUT1 = myLib.myTable;
%let _OUTPUT1_connect = ;
%let _OUTPUT1_engine = ;
%let _OUTPUT1_memtype = DATA;
%let _OUTPUT1_options = %nrquote();
%let _OUTPUT1_alter = %nrquote();
%let _OUTPUT1_path = %nrquote(/myTable_A5E5JYT6.C7000MOL%(WorkTable%));
%let _OUTPUT1_type = 1;
%let _OUTPUT1_label = %nrquote();
/* List of target columns to keep  */ 
%let _OUTPUT1_keep = myID first_item <16 more items> last_item;
%let _OUTPUT1_col_count = 19;
%let _OUTPUT1_col0_name = myID;
%let _OUTPUT1_col0_table = myLib.myTable;
%let _OUTPUT1_col0_length = 8;
%let _OUTPUT1_col0_type = ;
%let _OUTPUT1_col0_format = 13.;
%let _OUTPUT1_col0_informat = 13.;
%let _OUTPUT1_col0_label = %nrquote(my ID);
%let _OUTPUT1_col0_input0 = myID;
%let _OUTPUT1_col0_exp = ;
%let _OUTPUT1_col0_input = myID;
%let _OUTPUT1_col0_input_count = 1;
%let _OUTPUT1_col1_name = first_item;
%let _OUTPUT1_col1_table = myLib.myTable;
%let _OUTPUT1_col1_length = 8;
%let _OUTPUT1_col1_type = $;
%let _OUTPUT1_col1_format = $CHAR8.;
%let _OUTPUT1_col1_informat = $CHAR8.;
%let _OUTPUT1_col1_label = %nrquote(first data item in my table);
%let _OUTPUT1_col1_input0 = first_item;
%let _OUTPUT1_col1_exp = ;
%let _OUTPUT1_col1_input = first_item;
%let _OUTPUT1_col1_input_count = 1;

<documentation about 16 more columns>

%let _OUTPUT1_col18_name = last_item;
%let _OUTPUT1_col18_table = myLib.myTable;
%let _OUTPUT1_col18_length = 16;
%let _OUTPUT1_col18_type = $;
%let _OUTPUT1_col18_format = $16.;
%let _OUTPUT1_col18_informat = $16.;
%let _OUTPUT1_col18_label = %nrquote(last data item in my table);
%let _OUTPUT1_col18_input0 = last_item;
%let _OUTPUT1_col18_exp = ;
%let _OUTPUT1_col18_input = last_item;
%let _OUTPUT1_col18_input_count = 1;
%let _OUTPUT1_filetype = WorkTable;

在SAS DI Studio中,用戶編寫的節點可以有多個輸出表,可以從節點圖標看到並可訪問,右鍵單擊表可以看到更改表詳細信息(表名,類型,長度,格式,信息) ,等等)。 請注意我使用的是4.6版本

在我的截圖下面,我的用戶編寫節點已經有三個輸出表。 添加第四個:右鍵單擊節點選擇“添加工作表”將打開一個新窗口,供您輸入表格詳細信息

在節點的DI Auto生成代碼中,sas會將_OUTPUT1,2,3,4分配給您的表,因此在您的代碼中,您可以使用相應的&輸出來引用它們。

用戶書面節點DI Studio

添加表后,可以通過可視界面(點擊)選擇其屬性,查看和編輯所有輸出表詳細信息(長度,格式,信息)。 所以你不需要一個宏。 表格屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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