如何在 SAS 中识别具有特定日期的记录?

时间:2021-05-19 21:43:08

标签: sql sas

我是 SAS 的新手,在识别具有特定日期的表中的记录时遇到问题。 我已经声明了一个名为 fec_diario 的变量。

%let fec_diario = 20210423;

我有评级表:

<头>
鳕鱼 const value 日期
1 11 321 20210413
2 22 543 20210423
3 33 222 20210413
4 44 111 20210413
4 44 555 20210423
6 66 666 20210423
7 77 216 20210520
8 88 766 20210520

而且我需要进行查询,向我显示具有最近日期的客户端,即小于或等于变量 fec_diario 中声明的日期的日期。

我通过执行以下代码实现了这一点:

proc sql;
create table rating_process as
select * from rating
where date <= &fec_diario;
run;

我得到了这个结果:

<头>
鳕鱼 const value 日期
1 11 321 20210413
2 22 543 20210423
3 33 222 20210413
4 44 111 20210413
4 44 555 20210423
6 66 666 20210423

但是,如果我有多个具有相同代码的记录,我需要它只显示最近日期的记录..

总而言之,我应该得到一张这样的表格:

<头>
鳕鱼 const value 日期
1 11 321 20210413
2 22 543 20210423
3 33 222 20210413
4 44 555 20210423
6 66 666 20210423

如果有人可以为我的案例提出解决方案,那将非常有帮助,非常感谢。

1 个答案:

答案 0 :(得分:1)

试试这个,它可能在 SAS 中有效,但在其他语言中可能无效:

proc sql;
create table rating_process as
select * from rating
where date <= &fec_diario
group by cod
having date = max(date);
quit;

或者使用 PROC SORT 和 LAST 逻辑。

排序,以便最大日期是每个 COD 的最后一条记录。

proc sort data=rating_process; by COD DATE; run;

现在获取每个 COD 的最后一条记录。

data want;
   set rating_process;
   by COD DATE;
   if last.COD;
run;

请注意,SQL 需要 QUIT,而不是 RUN。