创建一个SAS函数,用作输入和输出数据集

时间:2014-02-06 19:25:25

标签: function input dataset sas output

我正在做同样的10个子步骤转换到多个数据集。我们称这种转变为flag_price_change 此转换将数据集和阈值(实际)作为输入,并创建10个子数据集,以便提供具有一些添加列的最终数据集。正如我之前所说,我重复这个转换到多个数据集

当我以相同的方式处理多个数据表时,我想知道我是否可以在SAS中创建这样的函数。

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

其中column_name 1和2只是算法只关注的列的名称,而output_table应该是执行flag_price_change函数后创建的表。

问题:

  1. 定义这样一个函数的过程是什么?
  2. 我可以将其存储在单独的SAS文件中吗?
  3. 如何从其他SAS程序调用此功能?

1 个答案:

答案 0 :(得分: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);

有很多关于宏编程的技巧和捕捉要注意,所以请在每一步检查你的工作。