簡體   English   中英

在SAS中按組選擇字符串的模式

[英]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; 

嗯,一種方法可能是:

  1. 首先通過id和工作日本身計算工作日的數量;
  2. 然后通過id只獲取count變量的max()。

當然,如果您有一個多模式組,這將按 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM