proc sql模式功能

时间:2014-07-28 18:59:48

标签: sas

我知道在mysql中没有聚合函数来计算模式(你必须做很多步骤)。但我认为在proc sql应该是可能的。有办法吗? 代码就像这样:

select phones, mode(state_id)as state from
xxx.listings_abr3 
group by phones

错误是:

无法找到功能模式。

谢谢!

2 个答案:

答案 0 :(得分:5)

MODE中可以使用子查询

proc sql

data have;
  call streaminit(7);
  do id = 1 to 100;
    x = rand('Geometric',.2);
    output;
  end;
run;

proc sql;
 select x as mode from (
        select x, count(1) as count from have group by x
        ) 
    having count=max(count);
quit;

这利用了SAS为您做的自动重新融合;如果你想避免这种情况,你需要做更多的工作才能让声明工作。

您可能仍需要对此进行进一步的工作,因为您可能有多种模式,但这并不区分它们(它会返回所有模式)。

答案 1 :(得分:3)

使用Joe在答案中给出的方法,以下是按组计算模式的方法:

data have;
  call streaminit(7);
  do n_group = 1 to 3;
      do id = 1 to 100;
        x = rand('Geometric',.2);
        output;
      end;
  end;
run;

proc sql;
 select n_group, x as mode from (
        select n_group, x, count(1) as count from have group by n_group, x
        )
    group by n_group
    having count=max(count);
quit;