SAS - 如何按数据步中一列的最大值进行过滤

SAS - How to filter by max value from one column in a datastep

我有一份年度调查,我对其进行了一些验证。我只想对当前年份进行验证(surveyYear 列中的最大年份)。该调查每年都会进行,因此我希望将其自动化而不是写当年。因此,当 2019 年的调查到来时,我不需要更改代码。

是否可以在set语句中过滤surveyYear只取列中最大的数字?我尝试了不同的组合,但没有成功。如果不可能,我怎么解决呢

我还想在数据步中执行此操作,而不是在 proc 中执行,因为验证代码在 set 语句之后的数据步中。

data have;
input surveyYear id score varChar. ;
datalines;
2016 1      10     Yes
2016 2      6      Yes
2016 3      8      Yes
2016 4      .      No
2017 5      6      No
2017 6      5      No
2017 7      12     IU
2017 8      3      IU
2017 9      2      IU
2017 10     15     99999
2018 11     0      .
2018 12     .      No
2018 13     10     Yes
2018 14     8      No
2018 15     11     No
2018 16     3      IU
;
run; 

data want;
set have (where=(surveyYear > 2017));
/* I would like to have something that states the max surveyYear instead */
/* (where=(surveyYear = max(surveyYear))) */
run;

要过滤最大值,您可以先获取最大值,然后应用过滤器。

proc sql noprint;
select max(year) into :latest_year from have;
quit;

然后在你的过滤器中使用它。

data want;
set have (where=(year=&latest_year.));