0

我想知道是否有一种方法可以定义在使用宏输出数据时何时何地发生分页符。我知道在各种 ODS 标记中可以使用“Startpage=NOW”,但如果在该标记集中使用宏,这似乎不起作用。所以基本上我想要两个表格,每个个人 ID 代码的图表都在一个页面上,下一页包含相同的摘要图表,该个人的图表等。目前我只能让每个表格和图表都有自己的单独的页面,这是一个冗长的报告!任何帮助/建议将不胜感激!

    /*************************************************************************/
    /* Create a macro variable of all the ID codes                       */
    /*                                                                  */
    /*************************************************************************/

    proc sql noprint;
        select personal_id
        into :varlist separated by ' ' /*Each identifier code in the list is sep. by a single space*/
    from provider;
    quit;

    %let cntlist = &sqlobs; /*Store a count of the number of id codes*/
    %put &varlist; /*Print the codes to the log to be sure our list is accurate*/

    ods tagsets.rtf file="C:\USER\test.doc" style=sasdocprinter;

 /*  macro for generating the output table*/        

    %macro output(x);

    proc print data=prov_&x;
    run;


    proc print data=prov_revCD_&x;
    run;

    /*Print graph to template defined earlier*/
    ods graphics on / height=500px width=500px;
    proc sgrender data=summary_&x template=corf_graphs;
    run;
    ods graphics on / reset=all;


    %mend;

    %macro loopit(mylist);
        %let else=;
       %let n = %sysfunc(countw(&mylist)); /*let n=number of codes in the list*/
        data 
       %do I=0 %to &n;
          %let val = %scan(&mylist,&I); /*Let val= the ith code in the list*/
        %end;
    /*Run a loop for each oscar code. Each code will enter the 
       %do j=0 %to &n;
          %let val = %scan(&mylist,&j); /*Let val= the jth code in the list*/
    /*Run the macro loop to generate the required tables*/
    %runtab(&val);

    %output(&val);

       %end;
       run;


    %mend;
    %loopit(&varlist)
    /*Run the macro loop over the list of significant procedure code values*/



    ods tagsets.rtf close;
4

3 回答 3

0

宏只不过是源代码生成设备。它们对任何特定技术的有效性都没有影响,除非它们的(错误)使用可能会使人们更难看出如何正确地做到这一点。

在这种情况下,如果您希望 的每个单次迭代的全部内容都%output()在一个页面上,那么您只需在调用startpage now之前添加一个。%output(&val)

  %runtab(&val);

  ods tagsets.rtf startpage=now;

  %output(&val);

%end;

这将在输出之前立即生成起始页指令。如果您在调用它之前总是想要一个新页面,您可以很容易地将它包含在%output宏中。

于 2015-06-08T14:37:51.370 回答
0

我在建议的地方插入了 startpage=NOW 并插入了一个空白页面,在玩弄了这个位置并查看了代码在做什么之后,它最终工作了:

  ods tagsets.rtf startpage=NOW;

 %runtab(&val);

  %output(&val);
  ods tagsets.rtf startpage=no;

%end;
于 2015-06-08T20:11:45.640 回答
0

除了使用宏之外,您还可以考虑使用pagebywithproc print来为您拆分页面。

请参阅此链接以获取 PageBY

于 2015-06-09T02:01:53.743 回答