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.));
我有一份年度调查,我对其进行了一些验证。我只想对当前年份进行验证(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.));