我有一个非常大的表,其中包含一个索引日期时间字段.我希望按月对数据集进行分组处理,只输出每个月的最后一次观察.
问题是它不包含月份字段,所以我不能使用这样的东西:
if last.month then do;
output;
end;
Run Code Online (Sandbox Code Playgroud)
有没有办法可以实现这种行为,而无需在以前的datastep中添加月份字段?该表是50 gig压缩,所以我想避免任何不必要的步骤.
谢谢
您可以使用'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)
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |