В SAS, как отображать уникальные значения при применении процедур таблицы. - PullRequest
0 голосов
/ 06 декабря 2018

Я ищу способ создания таблицы частот, отображающей количество уникальных значений для переменной ID на уникальное значение переменной Subclass.

Я бы хотел упорядочить результаты по переменной Class.

Желательно, чтобы я отображал количество уникальных значений для ID на Subclass в виде доли от n для ID.В приведенном ниже примере хотите, чтобы эти значения отображались в% totalID.

Кроме того, я хотел бы отобразить количество уникальных значений для ID на Subclass в виде доли от суммы уникальных ID значений, найденных в каждом Class.В приведенном ниже примере хотите, чтобы эти значения отображались в% внутри идентификатора класса.

Имеют:

ID        Class        Subclass         
-------------------------------   
ID1        1           1a          
ID1        1           1b           
ID1        1           1c           
ID1        2           2a

ID2        1           1a           
ID2        1           1b           
ID2        2           2a           
ID2        2           2b              
ID2        3           3a

ID3        1           1a                      
ID3        1           1d 
ID3        2           2a
ID3        3           3a           
ID3        3           3b           

Хочу:

                         Unique number   
Class       Subclass       of IDs        %totalID        %withinclassID
--------------------------------------------------------------------
1            
             1a             3             100.0             50.00 
             1b             2             66.67             33.33 
             1c             1             33.33             16.67
             SUM            6
2            
             2a             3             100.0             75.00
             2b             1             33.33             25.00
             SUM            4
3            
             3a             2             66.67             66.67
             3b             1             33.33             33.33
             SUM            3

Мой первоначальный подход заключался в выполнении PROC FREQ для NLEVELS с получением таблицы частот для числа уникальных идентификаторов в подклассе.,Здесь, однако, я теряю информацию о классе.Поэтому я не могу упорядочить результаты по классам.

Мой второй подход связан с использованием PROC TABULATE.Однако я не могу произвести какие-либо процентные расчеты на основе уникальных подсчетов в такой таблице.

Существует ли прямой способ табулирования частот одной переменной в соответствии со второй переменной, сгруппированных по третьей переменной - отображение общего и в процентах группы?

Ответы [ 2 ]

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

Опция nlevels в proc freq может создать уникальный счетчик, который вам нужен, без потери данных, при условии, что вы включите переменные Class и Subclass в оператор by.Это также означает, что вам придется предварительно отсортировать данные по одним и тем же переменным.

Тогда вы можете попробовать proc tabulate, чтобы получить остальную часть вашего требования.

data have;
input ID $ Class Subclass $;
datalines;
ID1        1           1a
ID1        1           1b
ID1        1           1c
ID1        2           2a
ID2        1           1a
ID2        1           1b
ID2        2           2a
ID2        2           2b
ID2        3           3a
ID3        1           1a
ID3        1           1d
ID3        2           2a
ID3        3           3a
ID3        3           3b
;
run;

proc sort data=have;
by class subclass;
run;

ods output nlevels = unique_id_count;

proc freq data=have nlevels;
by class subclass;
run;
0 голосов
/ 06 декабря 2018

Вы можете сделать двойной процесс частоты или SQL.

/ * Здесь показано, как подсчитать количество уникальных вхождений переменной в разных группах.Он использует набор данных SASHELP.CARS, который доступен для любой установки SAS.Задача состоит в том, чтобы определить количество уникальных автопроизводителей по происхождению /

Примечание. Решение SQL может быть отключено, если у вас большой набор данных, и это не единственные два способа вычисления различных показателей.Если вы имеете дело с большим набором данных, могут подойти другие методы. * /

*Count distinct IDs;
proc sql;
create table distinct_sql as
select origin, count(distinct make) as n_make
from sashelp.cars
group by origin;
quit;

*Double PROC FREQ;
proc freq data=sashelp.cars noprint;
table origin * make / out=origin_make;
run;

proc freq data=origin_make noprint;
table origin / out= distinct_freq outpct;
run;

title 'PROC FREQ';
proc print data=distinct_freq;
run;
title 'PROC SQL';
proc print data=distinct_sql;
run;
...