【问题标题】:Create a SAS function that takes as input and output a dataset创建一个将数据集作为输入和输出的 SAS 函数
【发布时间】:2014-03-03 22:35:48
【问题描述】:

我正在对多个数据集进行相同的 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 程序调用此函数?

【问题讨论】:

    标签: function input dataset sas output


    【解决方案1】:

    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);
    

    宏编程有很多技巧和陷阱需要注意,因此请务必检查每一步的工作。

    【讨论】:

    • 谢谢。非常有帮助!如果我将此宏放在另一个 SAS 程序中并想调用它怎么办?就像拥有一个 flagalgorithm.sas 和 myprogram.sas
    • 当然,这很常见。只需使用 %include "flagalgorithm.sas";在 myprogram.sas 的顶部,以便编译宏并可供使用。
    • 谢谢!最后一个问题...我正在使用 SAS Entreprise Guide,因此我的程序位于“程序”文件夹下的项目流程中。您知道在企业指南中执行 %include 的方法吗?谢谢
    • 如果您有权访问作为 SAS autoexec 脚本的一部分分配的自动调用库,另一种选择是将宏保存在那里,然后在您开始新的时候自动为您提供会议。你可以检查你是否有这样的%put %sysfunc(getoption(sasautos));
    猜你喜欢
    • 2013-10-02
    • 1970-01-01
    • 2022-11-10
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2020-12-07
    • 2021-01-28
    相关资源
    最近更新 更多