2014-02-06 59 views
1

我做同樣的10個分步改造,多個數據集。我們稱之爲flag_price_change
這種變換作爲輸入的數據集和一個閾值(實數)和以拿出最後一個與一些添加的列創建10個子數據集。正如我以前說過,我再說一遍這一轉變過程中多個數據集創建一個SAS功能是作爲輸入和輸出數據集

由於我處理多個數據表以同樣的方式,我想知道如果我能在SAS創建這樣的功能。

flag_price_change(input_table,column_name1,column_name2,threshold,output_table). 

其中列名1和2都只是算法只專注於列的名稱,並執行flag_price_change功能後output_table應該是創建的表。

問題:

  1. 什麼來定義這樣的功能的程序?
  2. 我可以將它存儲在單獨的SAS文件中嗎?
  3. 我如何從另一個調用SAS程序這個功能呢?

回答

2

SAS功能是用於數據的個人意見。你想要的是一個宏(簽出入門指南here),它是這樣定義的:

%macro flag_price_change(input_table, column_name1, column_name2, threshold, output_table); 
    /** Inside the macro, you can refer to each parameter/argument 
     with an ampersand in front of it. So for example, to add 
     column_name1 to column_name2, you would do the following: 
    **/ 

    DATA &output_table; 
     set &input_table; 

     new_variable = &column_name1 + &column_name2; 
    RUN; 

%mend; 

要調用宏,你可以這樣做:

%flag_price_change(
    input_table = data1, 
    column_name1 = var1, 
    column_name2 = var2, 
    threshold = 0.5, 
    output_table = output1); 

調用同一代碼另一個數據用不同的變量名和門檻設置:

%flag_price_change(
    input_table = data2, 
    column_name1 = var3, 
    column_name2 = var4, 
    threshold = 0.25, 
    output_table = output2); 

有很多技巧和漁獲量與宏編程需要注意的,所以每一步都檢查你的工作。

+0

謝謝。很有幫助! 如果我把這個宏放在另一個SAS程序中並想調用它,該怎麼辦?像有一個flagalgorith.s.sas和myprogram.sas – Stephane

+1

當然,這是非常普遍的。只需使用%include「flagalgorithm.sas」;在myprogram.sas的頂部,這樣宏將被編譯並可用。 –

+0

謝謝!最後一個問題......我正在使用SAS企業指南,因此我的程序位於項目流程下的「程序」文件夾下。您是否知道在企業指南中使用%include的方法?感謝 – Stephane

相關問題