SAS / SQL-创建一列以显示值出现的次数

时间:2018-09-20 23:12:26

标签: sql sas

我有一张带有帐号和几个属性的表。

帐户| attr1 | attr2 | attr3 ...

问题是列表中的重复帐号具有不同的属性。更糟的是,当有两个帐号条目时,这些条目可能具有完全不同的属性。

我有一个排序方案可以用来某种程度上解决问题,但是在对表格进行排序后,我只需要每个帐号的首次出现。我正在尝试使用Proc SQL在SAS中执行此操作。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我不认为可以使用PROC SQL来做到这一点,但是在DATA STEP逻辑上是可行的。

对数据进行排序后,使用first.(发音为第一个点)来选择第一个匹配项:

首先使用所需的方案对数据进行排序。

proc sort data=have out=intermediate_table;
  by acct <other variables>;
run;

然后只需使用first.acct

data want;
  set intermediate_table;
  by acct <other variables>;
  if first.acct then output;
run;

答案 1 :(得分:0)

proc sort是执行此操作的最简单方法。您可以使用未公开的monotonic()函数在Proc sql中执行此操作,如下所示

data have;
input acct attr1 $ attr2 $ attr3 $;
datalines;
100 a b c
100 b d e
100 c e f
101 a b c
102 h i j
102 h k l
 ;

proc sql;
create table want(drop =rn) as 
select * from 
(select b.*,monotonic() as rn
 from have b)
group by acct
having rn =min(rn);

或通过在数据步骤中使用 n (按注释部分中的@richard的建议,创建视图是一个不错的选择),然后按如下所示进行分组。

data have_view/view=have_view;;
set have;
rn=_n_;
run; 

proc sql;
create table want as 
select acct, attr1 , attr2 , attr3
from have_view b
group by acct
having rn =min(rn);