我有一张带有帐号和几个属性的表。
帐户| attr1 | attr2 | attr3 ...
问题是列表中的重复帐号具有不同的属性。更糟的是,当有两个帐号条目时,这些条目可能具有完全不同的属性。
我有一个排序方案可以用来某种程度上解决问题,但是在对表格进行排序后,我只需要每个帐号的首次出现。我正在尝试使用Proc SQL在SAS中执行此操作。
有什么想法吗?
答案 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);