我有一个R脚本,可以让我在SAS中运行一个宏,就像这样(来自here的启发):
setwd("C:/myplace")
sas_script <- "MyScript.sas"
sas_log <- tempfile()
sas_out <- tempfile()
cmd <- sprintf(
'sas.exe -nosplash -icon -sysin "%s" -log "%s" -print "%s"',
sas_script, sas_log, sas_out
)
return_code <- system(cmd) # Runs sas and saves the return code
print(return_code)
但是我想将一个参数传递给宏,这样我就可以运行它,例如从2010年到2018年的所有年份。我的SAS宏(调用其他几个宏)看起来像这样:
options nocenter nodate nonumber mprint;
%let sti=C:\Mypath\;
%include "&sti.macro1.sas" ;
%let aar=2018;
%macro1(aar=&aar);
因此,我不想在sas中使用%let aar=2018;
,而是在R中执行类似for(aar in 2010:2018){ code }
的操作。
有什么建议吗?
答案 0 :(得分:3)
您可以使用-sysparm
命令行选项将值传递到SAS程序中。您可以使用&sysparm
宏变量引用在SAS程序中引用该值。
答案 1 :(得分:3)
您可以在SAS命令行上使用-SET选项将参数传递给SAS。然后,使用%SYSGET宏在程序中检索这些值。有关进一步的讨论和示例,请参见文章"How to pass parameters to a SAS program."
答案 2 :(得分:2)
我不确定我是否理解您的问题,但是如果我是对的,那么您想从N年循环到另一年M,对吗?
因此,在SAS中,您可以在宏内部编写循环并运行宏。在您的示例中,我将这样做:
options nocenter nodate nonumber mprint;
%let sti=C:\Mypath\;
%include "&sti.macro1.sas" ;
%macro_loop(startyear,endyear);
%do year = &startyear. %to &endyear.;
%macro1(aar = &year);
%end;
%mend;
%macro_loop(startyear = 2010, endyear = 2018);