SAS: PROC SGPLOT BY GROUP автоматические имена файлов - PullRequest
1 голос
/ 28 февраля 2012

Я строю некоторые данные, используя параметр BY GROUP.Хотя я могу использовать опцию #byval для автоматического добавления значения BY GROUP в заголовок каждого графика, но я хочу сохранить каждый график индивидуально и хочу назвать его после #byval вместо его вызова - SGPLOT01, SGPLOT02 ...

Например, скажем, у меня есть:

data xyz;
input type$ x y1 y2@@;
cards;
A 1 5 7
A 2 7 9
A 3 8 10
B 1 5 7
B 2 7 9
B 3 8 10
;;
RUN;

PROC SGPLOT DATA=xyz;
by type;
series1 x=x y=y1/markers;
series2 x=x y=y2/markers;
title "#byval";
RUN;

В этом примере будут созданы два графика, каждый для типов A и B. Но программа автоматически назовет их как SGPLOT1.pdf и SGPLOT2.pdf.,Я бы предпочел назвать их A.pdf и B.pdf и сохранить их в каталоге "C: / SGPLOTS /".

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Один из вариантов - использовать ODS и использовать макрос для печати каждого ТИПА отдельно, как в следующем примере.

data xyz;
input type$ x y1 y2 @@;
cards;
A 1 5 7
A 2 7 9
A 3 8 10
B 1 5 7
B 2 7 9
B 3 8 10
;
RUN;

ods listing close;

%macro plot_it(type=);

   goptions reset
      device = sasprtc
      target = sasprtc
      ;

   ods pdf file="C:/SGPLOTS/&type..pdf" notoc;

   PROC SGPLOT DATA=xyz;
   by type;
   where type = "&type";
   series x=x y=y1/markers;
   series x=x y=y2/markers;
   title "#byval";
   RUN;

   ods pdf close;

%mend plot_it;

%plot_it(type=A);
%plot_it(type=B);
0 голосов
/ 07 февраля 2014

Вы хотите добавить имя переменной в круглых скобках после #BYVAL. В этом примере вы хотите поместить #byval (type) в заголовок.

Я поместил ваш пример в то, что SAS называет «сэндвич HTML», который состоит из двух строк сверху и двух строк снизу. Кроме того, я добавил опцию helpbrowser, которая говорит SAS использовать свои собственные возможности для отображения вывода html.

option helpbrowser=sas;

/**** top of html sandwich *****/
ods html ;
ods graphics on; 
/*******************************/


data xyz;
input type$ x y1 y2@@;
cards;
A 1 5 7
A 2 7 9
A 3 8 10
B 1 5 7
B 2 7 9
B 3 8 10
;;
RUN;

PROC SGPLOT DATA=xyz;
by type;
series x=x y=y1/markers;
series x=x y=y2/markers;
title "Here is the type:  #byval(type)";
RUN;


/**** bottom of html sandwich *****/
ods graphics off;
ods html close;
/**********************************/
...