Насколько я понимаю, в SAS такие программы, как proc univariate
, обычно не могут создавать представления в качестве выходных данных.Единственный обходной путь, о котором я могу подумать, - это для вас повторить логику процесса в шаге данных и получить представление из шага данных.Вы можете сделать это, например, перенеся ваши переменные во временные массивы и используя функцию pctl .
Вот простой пример:
data example /view = example;
array _height[19]; /*Number of rows in sashelp.class dataset*/
/*Populate array*/
do _n_ = 1 by 1 until(eof);
set sashelp.class end = eof;
_height[_n_] = height;
end;
/*Calculate quantiles*/
array quantiles[3] q40 q50 q60;
array points[3] (40 50 60);
do i = 1 to 3;
quantiles[i] = pctl(points[i], of _height{*});
end;
/*Keep only the quantiles we calculated*/
keep q40--q60;
run;
С чуть большей работой,Вы также можете сделать так, чтобы этот подход возвращал процентили для отдельных групп, а не для всего набора данных сразу.Для этого вам нужно написать цикл двойного DOW, например:
data example;
array _height[19];
array quantiles[3] q40 q50 q60;
array points[3] _temporary_ (40 50 60);
/*Clear heights array between by groups*/
call missing(of _height[*]);
/*Populate heights array*/
do _n_ = 1 by 1 until(last.sex);
set class end = eof;
by sex;
_height[_n_] = height;
end;
/*Calculate quantiles*/
do i = 1 to 3;
quantiles[i] = pctl(points[i], of _height{*});
end;
/* Output all rows from input dataset, with by-group quantiles attached*/
do _n_ = 1 to _n_;
set class;
output;
end;
keep name sex q40--q60;
run;