【发布时间】:2017-11-25 10:02:25
【问题描述】:
以下示例数据来自oracle数据库
promo flag
vijay a
vijay b
vijay c
sam b
sam g
sam c
我有一个连接到oracle的proc sql语句(虽然我没有在下面提到oracle连接)
proc sql;
create table a as select *from new;
quit;
然后根据上面的数据集a进行两个proc排序语句。
proc sort data = a;
by promo descending flag;
run;
proc sort data =a nodupkey out =new1;
by promo;
run;
现在我想在 proc sql 语句本身中执行这两个 proc sort 语句。知道该怎么做吗?
【问题讨论】:
-
请展示几条记录的例子,说明你拥有的数据,以及你想要的输出数据。我永远记不起 SORT NODUPKEY 保留了哪条记录。看起来您可能正在尝试为每个 PROMO 值选择一条记录,选择一条具有最大值(或最小值?)值的记录作为标志?
-
新数据;输入促销$标志$;数据线; vijay a vijay b vijay c sam b sam g sam c ;运行;
-
首先我需要按促销和降序标志排序,然后为每个促销获取最高标志并将剩余的发送到新数据集 new 1
-
能否有两条记录具有相同的促销值和相同的标志值?建议编辑您的问题以在其中包含示例数据。对于您的示例数据,答案是否定的,这使得这更容易一些。
-
如果您希望每个键值组仅获取一条记录,即使它们具有不同的非键变量值,那么 SAS 的 SQL 实现无法做到这一点。如果您将 SQL 推送到数据库中,那么您可以使用较新的 SQL 实现支持的窗口函数来生成行号,并且只为每个组选择第一行。
标签: sas