Sas 为什么可以';从数据步骤到过程步骤逐个解析值?

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

我正在尝试解析从数据步骤到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 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;
在此处输入图像描述

  • 关于你的代码
  • 注意:下面是有关SAS代码的内容 逐步处理

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