我是 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 |
如果有人可以为我的案例提出解决方案,那将非常有帮助,非常感谢。
答案 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。