将SAS数据集列作为宏参数传递

时间:2017-01-23 20:37:17

标签: macros sas sas-macro

我有一个值为

的SAS数据集
yyyymm
201605
201606
201607
201608
201609

我正在尝试找到一种方法将这些值一次传递给宏,以便

do while dataset still has value
%macro passdata(yyyymm);
end

我如何在SAS中执行此操作。有人可以帮助您提供示例/代码段。

2 个答案:

答案 0 :(得分:3)

如前面的评论所述,传递参数的方法是通过调用执行例程。请注意,这必须在datastep环境中完成。从您输入的集合中读取行。

您可以输入多个变量。只需在' ||'中添加更多变量分隔符。请注意,变量可能包含很多空格。 (==与护理进行比较。)

这是一个小样本代码。测试

data start_data;
    input date_var ;
    datalines;
        201605
        201606
        201607
        201608
        201609
        ;
run;

%macro Do_stuff(input_var);
    %put 'Line generates value ' &input_var;
%mend do_stuff;

data _null_;
    set start_data;
    call execute('%do_stuff('||date_var||')'  );
run;

答案 1 :(得分:0)

尝试此示例并尝试修改以满足您的需求......来自"来源"数据集我们可以使用调用symput()为每个观察分配宏令牌(由SAS自动数据集变量 n 区分,所以My_token1,My_token2等)一旦定义了一组宏变量,只是循环通过他们!该程序将打印从源日志到SAS日志的所有单个记录:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "\\\"";
final String string = ":\"{ -> :{   \n"
     + "}\"} -> }} ";
final String subst = "";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);