SAS 在 proc sql 与 proc sort nodupkey 中不同

use*_*549 5 sql sorting sas distinct proc

我有以下数据集:

data work.dataset;
input a b c;
datalines;
27 93 71 
27 93 72
46 68 75
55 55 33
46 68 68
34 34 32
45 67 88
56 75 22
34 34 32
;
run;
Run Code Online (Sandbox Code Playgroud)

我想从前两列中选择所有不同的记录,所以我写道:

proc sql;
create table work.output1 as
select distinct t1.a,
t1.b
from work.dataset t1;
quit;
Run Code Online (Sandbox Code Playgroud)

但现在我想知道 var c 的值在输出中看到的组合 (var a, var b) 旁边的前一组中代表什么。有办法找出来吗?我尝试按照 proc sort 进行排序,但我不知道它的工作方式是否与在 proc sql 中选择不同记录相同。

proc sort data = work.dataset out = work.output2 NODUPKEY;
by a b;
run;
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助。

Lau*_*ick 2

NODUPKEY 将为每个键返回一个观察结果。在您的示例中,仅保留 a=27 和 b=93 的两个观察值之一。c=71 或 c=72 将丢失。

NODUPREC 选项将删除重复记录。a=27 和 b=93 的两个观测值将被保留,但仅保留 a=34、b=34 和 c=32 值的两个观测值之一。

  • 在 sql select unique 查询中,没有真正删除任何记录,因为变量 c 不是 select 的一部分。在 proc sort nodupkey 示例中,SAS 仅保留它遇到的第一个观察结果。 (2认同)