NAME DATE
---- ----------
BOB 24/05/2013
BOB 12/06/2012
BOB 19/10/2011
BOB 05/02/2010
BOB 05/01/2009
CARL 15/05/2011
LOUI 15/01/2014
LOUI 15/05/2013
LOUI 15/05/2012
DATA newdata;
SET mydata;
count + 1;
IF FIRST.name THEN count=1;
BY name DESCENDING date;
run;
这里我得到了计数组明智的1,2,3所以..我想要名字的输出(所有的bob)如果计数>请帮帮我..
答案 0 :(得分:1)
最简单的方法是输出每个ID的最后一行,如果它是> 3,然后将该数据集合并回主数据集,仅保留匹配项。您还可以使用PROC FREQ
生成计数数据集并合并到该数据集。
您可以使用DoW循环在单个datastep中执行此操作,但这更复杂,因此我不建议新用户执行此操作。
答案 1 :(得分:0)
我认为这显示了SQL的强大功能 - 尽管有人会说,因为这会在日志中生成一个NOTE,这不是一个好习惯。使用GROUP& SQL中的HAVING子句创建一个名称的计数,然后将其限制为3.
proc sql;
create table want as
select *
from have
group by name
having count(name)>3;
quit;
答案 2 :(得分:0)
以下是使用PROC SQL
中的SUBQUERIES执行此操作的几种不同方法Data HAVE;
Length NAME $50;
Input Name $ Date: ddmmyy10.;
Format date ddmmyy10.;
datalines;
BOB 24/05/2013
BOB 12/06/2012
BOB 19/10/2011
BOB 05/02/2010
BOB 05/01/2009
CARL 15/05/2011
LOUI 15/01/2014
LOUI 15/05/2013
LOUI 15/05/2012
;
Run;
在Where语句中使用多值子查询
Proc sql;
Create table WANT1 as
Select *
From Have
Where Name in (Select name from have b group by b.name having count(b.name)>3);
Quit;
在From子句中使用子查询
Proc sql;
Create table WANT2 as
Select a.name, a.date
From Have a Inner Join (select name, count(name) as Count from have b group by b.name having Count>3)
On a.name=b.name
;
Quit;