Sas 为什么可以';从数据步骤到过程步骤逐个解析值?
我正在尝试解析从数据步骤到gplot过程的值,以便使用call-symput函数向图形添加一些统计信息。但似乎只有最后的观察结果被传递给了gplot。我如何解决这个问题?谢谢Sas 为什么可以';从数据步骤到过程步骤逐个解析值?,sas,Sas,我正在尝试解析从数据步骤到gplot过程的值,以便使用call-symput函数向图形添加一些统计信息。但似乎只有最后的观察结果被传递给了gplot。我如何解决这个问题?谢谢 libname out "c:\sas output"; %global ID; %global RSQ; %global RMSE; %macro plot(in=,id=); axis1; axis2 label=(angle=90 justify=center); symbol1 valu
libname out "c:\sas output";
%global ID;
%global RSQ;
%global RMSE;
%macro plot(in=,id=);
axis1;
axis2 label=(angle=90 justify=center);
symbol1 value=dot c=bib h=15pt i=rl;
symbol2 value=dot c=red h=15pt i=rl;
legend1 position=(outside center bottom) frame label=("Blade ID" font=arial height=15pt) ;
proc gplot data=∈
title1 "Correlation of &id &RSQ &RMSE";
plot ser*ttmcw_nm/ grid legend=legend1 haxis=axis1 vaxis=axis2 annotate=reg;
where Blade_ID="&id";
run;
%mend;
data _null_;
set reg;
call symput('ID',Blade_ID);
call symput('RSQ',_RSQ_);
call symput('RMSE',_RMSE_);
%put &ID;
%plot(in=out.bladeraw,id=&ID);
run;
在此处输入图像描述
%put
和%plot
开头的行仅由宏处理器解析一次,与数据步循环无关。要将所有&ID.
值打印到日志,您可以使用
par = symget('ID');
put par;
相反。要在循环中运行%plot
,可以将其放入宏语言循环中,请参见第2点
%macro generate_plots()代码>
%mend代码>
%generate_plots()代码>
%let vars=;
proc sql noprint;
select Blade_ID into :vars separated by '#' from reg;
quit;
%put &vars.;
%let i = 1;
%let var = %scan(%BQUOTE(&vars.), &i., %BQUOTE(#));
%do %while(&var. ne);
%plot(in=out.bladeraw, id=&var.);
%let i = %eval(&i. + 1);
%let var = %scan(%BQUOTE(&vars.), &i., %BQUOTE(#));
%put &var.;
%end;