我有一个值为
的SAS数据集yyyymm
201605
201606
201607
201608
201609
我正在尝试找到一种方法将这些值一次传递给宏,以便
do while dataset still has value
%macro passdata(yyyymm);
end
我如何在SAS中执行此操作。有人可以帮助您提供示例/代码段。
答案 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);