Включить условие макроса в отчет - PullRequest
0 голосов
/ 04 декабря 2018

Ниже приведен небольшой фрагмент кода для получения отчетов в формате Excel.

%if &linear %then %do;
ods excel options(sheet_name="vol");
proc print data=perf;
id direction segment;
var accts;
run;
%end;
%else %do;
ods excel options(sheet_name="vol");
proc print data=perf; 
id direction segment;
var accts;
run;
%end;


Direction segment     accts
 A          model     17177
 A          booked     567
 A          unbooked   5676
 B          model     17177
 B          booked     567
 B          unbooked   5676

Если сегменты недоступны, я получу отчет, как показано ниже

   Direction   segment    accts
     A          model     17177
     A          1         17177
     B          model     17177
     B          1         17177

Я планирую представить двамакропеременные

%let dir =A;
%let Non_segment=y;

Исходя из значения направления, он должен давать только это направление, а если сегмента нет (Non_segment = y;), он должен иметь только первое наблюдение.Таким образом, вывод будет выглядеть ниже для Non_segment = y

Direction  segment    accts
 A          model     17177

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Я попробовал код ниже.

%macro isblank(var);
%if %symexist(&var) %then 1; %*not exist*;
%else %if %sysevalf(%superq(&var)=,boolean) %then 1; %*blank*;
%else 0;
%mend isblank;



%let dir =A;
%let Non_segment=y;

proc print data=new;
%if %isblank(Non_segment) %then (obs=1);*firstobs*;
id direction segment;
var acct;
%else;*all obsevation*;
proc print data =new;
id direction segment;
var acct;
run;


Getting below error

proc print data=new;
78 %if %isblank(Non_segment) %then (obs=1);*firstobs*;
ERROR: Nesting of %IF statements in open code is not supported. %IF ignored.
ERROR: Skipping to next %END statement.
79 id direction segment;
80 var acct;
81 %else;*all obsevation*;
ERROR: The %ELSE statement is not valid in open code.

NOTE: The SAS System stopped processing this step because of errors.
NOTE: There were 6 observations read from the data set WORK.NEW.
NOTE: PROCEDURE PRINT used (Total process time):
real time 10.57 seconds
cpu time 6.31 seconds



82 proc print data =new;
83 id direction segment;
84 var acct;
85 run;
0 голосов
/ 04 декабря 2018

Если у вас нет какой-либо переменной для проверки, вы не можете установить подмножество для первого наблюдения для каждой группы только с помощью оператора WHERE.Вам нужно будет сгенерировать шаг данных.

data to_print ;
  set perf ;
  by direction;
%if %length(&dir) %then %do;
  where direction="&dir";
%end;
%if %upcase(&non_segment)=Y %then %do;
  if first.direction;
%end;
run;
...