Как мы используем% sysfunc для вычисления среднего числовой переменной? - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь вычислить среднее числовой переменной в заголовке макроса. Код выглядит так:

title "Using sysfunc to evaluate mean %sysfunc((mean(Total_retail_price)) )"

Это дает ошибку, которая говорит:

ОШИБКА: отсутствует имя функции в справочнике по макросам% SYSFUNC или% QSYSFUNC.

Любая помощь приветствуется!

EDIT:

%macro type(year=,type=);

proc print data=salesxls ;

title " using sysfunc to evaluate  mean %sysfunc((mean(Total_retail_price)) )";

where year(order_date)=&year. and Order_type=&type;

format order_date year4.;

run;
%mend type;

p.s новичок здесь

Ответы [ 2 ]

0 голосов
/ 26 января 2019

В случае нескольких групп одна макропеременная не будет полезна.

Имя или значение переменной BY можно отобразить в операторе TITLE с использованием специальных токенов - #BYVAL<n>,#BYVAR<n>, #BYVAL(<var>) и #BYVAR(<var>).

Создайте view со столбцом для среднего значения цены, так что это будет переменная.Используйте этот столбец в операторе by и специальный токен в title.

proc sql;
  create view work.cars_v as select 
  cars.*
  , mean(msrp) as mean_price format=dollar7. /* automatic remerge */
  from sashelp.cars
  group by Make,Type
  ;

options nocenter nobyline;

proc print data=work.cars_v;
  title "#byval(make) #byval(Type), Average MSRP:#byval(mean_price)";
  by Make Type mean_price;
  var Model Origin DriveTrain EngineSize Cylinders MSRP;
run;

Listing

--------------------------------------------------------------------------------------------------

Acura SUV, Average MSRP:$36,945

                               Drive    Engine
     Obs    Model    Origin    Train     Size     Cylinders        MSRP

       1     MDX      Asia      All       3.5         6         $36,945

--------------------------------------------------------------------------------------------------

Acura Sedan, Average MSRP:$34,772

                                                 Drive    Engine
     Obs    Model                      Origin    Train     Size     Cylinders        MSRP

       2    RSX Type S 2dr              Asia     Front      2.0         4         $23,820
       3    TSX 4dr                     Asia     Front      2.4         4         $26,990
       4    TL 4dr                      Asia     Front      3.2         6         $33,195
       5    3.5 RL 4dr                  Asia     Front      3.5         6         $43,755
       6    3.5 RL w/Navigation 4dr     Asia     Front      3.5         6         $46,100

--------------------------------------------------------------------------------------------------

Acura Sports, Average MSRP:$89,765

                                                Drive    Engine
     Obs            Model             Origin    Train     Size     Cylinders        MSRP

       7    NSX coupe 2dr manual S     Asia     Rear       3.2         6         $89,765

--------------------------------------------------------------------------------------------------

etc …
0 голосов
/ 26 января 2019

SAS не распознает переменную Total_Retail_Price в этом контексте, и большинство статистических функций не могут быть вызваны таким образом.

Вам необходимо присвоить среднее значение макропеременной.Вот один пример.

proc sql noprint;
select mean(Total_Retail_Price) into: mean_value
from salesxls
where year(order_date)=&year. and Order_type=&type;
quit;

Теперь вы можете добавить новую переменную макроса mean_value в заголовок.

title "The mean of Total Retail Price is: &mean_value.";

Теперь полный макрос будет выглядеть так:

%macro type(year=,type=);
proc sql noprint;
select mean(Total_Retail_Price) into: mean_value
from salesxls
where year(order_date)=&year. and Order_type=&type;
quit;

proc print data=salesxls ;    
title "The mean of Total Retail Price is: &mean_value."; 
where year(order_date)=&year. and Order_type=&type;    
format order_date year4.;
run;
%mend type;
...