通过SAS中的组处理

Rob*_*dge 2 sas

我有一个非常大的表,其中包含一个索引日期时间字段.我希望按月对数据集进行分组处理,只输出每个月的最后一次观察.

问题是它不包含月份字段,所以我不能使用这样的东西:

if last.month then do;
  output;
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法可以实现这种行为,而无需在以前的datastep中添加月份字段?该表是50 gig压缩,所以我想避免任何不必要的步骤.

谢谢

Lon*_*ish 7

您可以使用'groupformat'对原始数据集实际实现此目的,将datetime字段格式化为'dtmonyy5'.顾名思义,这个组按格式化的值而不是原始值.

data new1;
set old;
format datetime dtmonyy5.;
by groupformat datetime;
if last.datetime;
run;
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用Proc Summary,尽管这可能是内存密集型的,特别是对大型数据集.这是代码.

proc summary data=old nway;
class datetime;
format datetime dtmonyy5.;
output out=new2 (drop=_:) maxid(datetime(_all_))=;
run;
Run Code Online (Sandbox Code Playgroud)

只需快速记下上一个答案,'月'功能对日期字段起作用,而不是日期时间,因此您需要将datepart函数添加到该行.

month = month(datepart(datetime));
Run Code Online (Sandbox Code Playgroud)