#sas
#sas
Вопрос:
Мой набор данных и попытка
data mydata;
input Category $ Item $;
datalines;
A 1
A 1
A 2
B 3
B 1
;
proc sql;
create table mytable as
select *, count(Category) as Total_No_in_Category, count(Category)-count(item, "3") as No_of_not_3_in_the_same_category from mydata
group by Category;
run;
Результат
Category No_of_not_3_in_the_same_category Total_No_in_Category
A 3 3
A 3 3
A 3 3
B 2 2
B 2 1
Мой ожидаемый результат
Category No_of_not_3_in_the_same_ category Total_No_in_Category
A 2 3
B 1 2
Интересно, как достичь ожидаемого результата, используя только proc SQL. Большое вам спасибо.
Ответ №1:
COUNT(item, "3")
Вызов функции с двумя аргументами не является суммирующей функцией. Это приводит к автоматическому повторному объединению всех строк из исходной таблицы с совокупным вычислением ( count()
thes ). Повторное объединение является частной функцией SAS Proc SQL
, а не частью стандарта ANSI для SQL.
Похоже, вам нужно количество уникальных значений элементов, отличных от 3, поэтому вам понадобится
COUNT(DISTINCT ...expression...)
в запросе. ...expression...
Может быть case
предложением, которое преобразуется item="3"
в нулевое значение, не имея else
части case
предложения.
Пример:
create table want as
select
category
, count(*) as freq
, count(distinct case when item ne "3" then item end) as n_unq_item_not_3
from mydata
group by category
;