为SAS中的每个ID查找最常见的变量

时间:2016-01-04 23:53:22

标签: sas frequency

我的数据集如下所示:

ID     X
769   "c"
769   "f"
769   "c"
1632  "a"
1632  "a"
1632  "b"
1632  "g"
1632  "a"

我需要的是为每个ID找到最常用的X,以便得到的数据集为:

ID     X
769   "c"
1632  "a"

非常感谢任何反馈。

3 个答案:

答案 0 :(得分:1)

PROC SQL MAX()函数适用于字符变量,因此它是一种快速解决方案。

proc sql;
create table want as
select id, max(x) as max_a
from have
group by id;
quit;

编辑:使用BASE SAS和PROC SORT的替代解决方案。使用降序选项对数据进行排序,并为每个ID获取第一条记录。

Proc freq data=have;
Table id*x/out=count;
 Run;

proc sort data=count;
by ID descending count;
run;

data want;
set have;
by id;
if first.id;
run;

答案 1 :(得分:1)

好的,你可以使用proc freq和一些其他步骤来完成这项工作。

首先,创建数据:

data have;
format id $10. x $1.;
infile datalines dsd missover dlm='|';
input id $ x $;
datalines;
769|c
769|f
769|c
1632|a
1632|a
1632|b
1632|g
1632|a
;
run;

proc sort data=have;
by id;
run;

现在我们将看到每个X的ID的频率,并将结果输出到表格" almost_want"

proc freq data=have;
by id;
tables x / out=almost_want;
run;

然后我们只对X具有更高计数的值进行子集化:

proc sort data=almost_want;
by id count;
run;

data want;
    set almost_want;
    by id;
    if last.id then output;
run;

OBS:我的Id变量是字符,所以你想根据需要调整它。

答案 2 :(得分:0)

使用派生表子查询重新考虑proc sql解决方案:

proc sql;
   create table Output as   
   select id, x as freqx
   from
      (select id, x, count(x) as lettercount
       from example 
       group by id, x)  
   group by id
   having lettercount = max(lettercount);
quit;