删除SAS中数值变量的最大值

时间:2014-04-15 09:04:45

标签: syntax sas max delete-row

我有一个数据集,我想删除最大年份(现在是2014年)。我搜索一种语法,我可以删除数据集中的这个最大年份,而不必写年份= 2014然后删除 - 因为我不想在2015年成为新的最大年份时手动更正它。

我尝试过类似的事情:

data new;
set old;
if max(year) then delete;
run;

data new;
set old;
if year=max(year) then delete;
run;

这不起作用 - 最大功能似乎不是正确的方法吗?

亲切的问候 玛丽亚

3 个答案:

答案 0 :(得分:4)

或者在PROC SQL中......

proc sql ;
  select max(year(DATE)) into :YR from old ;
  delete from old where year(DATE) >= &YR ;
quit ;

创建新表而不是从旧表中删除...

proc sql ;
  select max(year(DATE)) into :YR from old ;
  create table new as select * from old where year(DATE) lt &YR ;
quit ;

答案 1 :(得分:1)

SAS逐行工作。因此,您将需要一个首先拉出最大日期的datastep,然后是第二个datastep,其中包含该日期的那些行将被删除。例如:

data Max_Date (keep = max_date);
 set original_dataset end = eof;
 retain max_date;
 if date > max_date then max_date = date;
 if eof then do;
    output;
 end;
run;

将最大日期放入宏变量,然后使用它来删除相应的记录

答案 2 :(得分:0)

超群,

如果最大日期始终是您尝试执行的操作的当前年份,则始终可以在开头编写宏来抓取当前年份以用于比较以从数据集中删除。

    %let numdate = %sysfunc(today(), date9.);
    %let Max_year = %substr(&numdate,6,4);
    %put todays date is &numdate;
    %put max year is &Max_year;

日志结果:

461  %let numdate = %sysfunc(today(), date9.);
462  %let Max_year = %substr(&numdate,6,4);
463  %put todays date is &numdate;
todays date is 15APR2014
464  %put max year is &Max_year;
max year is 2014

然后,您与创建的宏进行比较的代码应该可以胜任。

 data new;
    set old;
    if year = &Max_year then delete;
 run;