[英]Choosing the mode of a string by group in SAS
這似乎是一個非常簡單的操作,但我找不到簡單的方法。 我有一個包含客戶 ID 和每次購買的星期幾的數據集。 我只想通過id
獲得weekday
的模態值
DATA have;
INPUT id weekday $;
CARDS;
1 Thursday
1 Monday
1 Monday
2 Tuesday
2 Thursday
2 Tuesday
;
RUN;
DATA want;
INPUT id weekday $;
CARDS;
1 Monday
2 Tuesday
;
RUN;
嗯,一種方法可能是:
當然,如果您有一個多模式組,這將按 id 為您提供與其擁有的模式數量一樣多的行:
proc sql;
create table want as
select distinct
*
from (select
*,
count(weekday) as N
from have
group by id, weekday)
group by id
having N=max(N);
quit;
您可以使用Proc FREQ
來計算BY
組分區中的項目數,並使用DATA
步來過濾掉mode
值。
例子:
proc freq data=have noprint order=freq;
by id;
table weekday / out=counts;
run;
data want;
set counts;
by id;
* output multiple rows if there is a frequency count tie;
if first.id then _mode_count = count;
if _mode_count = count;
retain _mode_count;
keep id weekday;
run;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.