我有DYYMMDD格式的数据集
D160102
D160128
D160227
D160328
D160430
我如何每月阅读最新数据集。可以说1月份有两个数据集(D160102,D160128),我只想读D160128而不是另一个。怎么样 ??有什么帮助吗?
答案 0 :(得分:0)
假设它在表中作为字符串,您可以使用子字符串仅提取月份值
Select * from (
Select
Field
,SUBSTRING( Field, 3, 2 ) as 'Month'
,ROW_NUMBER() over (partition by SUBSTRING( Field, 3, 2 ) order by Field DESC) as 'frnk'
) a
Where a.frnk = 1
答案 1 :(得分:0)
不确定SAS,但这是针对MySQL的,这个想法是将所有字符串组合在一起,同一个月DYYMM
并获得更大的字符串。
<强> SQL Demo 强>
SELECT MAX(dday)
FROM Table1
GROUP BY SUBSTRING(dday,2,4)
<强>输出强>
| MAX(dday) |
|-----------|
| D160128 |
| D160227 |
| D160328 |
| D160430 |
答案 2 :(得分:0)
SAS数据步骤解决方案。读入日期为yymmdd,然后输出为yymm6,以便按日期降序排序,并且只取每个组的第一个。
data have;
input files $;
cards;
D160102
D160128
D160227
D160328
D160430
;
run;
data want;
set have;
date=put(input(substr(files, 2), yymmdd.), yymmn6.);
run;
proc sort data=want nodupkey;
by descending date;
run;
答案 3 :(得分:0)
正如其他人已经证明的那样,找到最新版本很容易。但是要在程序的其余部分中使用它,您将需要使用一些代码生成技术。像一个宏变量。
假设您的列表代表SAS数据集,那么可以使用类似的东西将它们组合成单个数据集。
data have; input dsname $ ;
cards;
D160102
D160128
D160227
D160328
D160430
;;;;
proc sql noprint ;
select dsname into :dslist separated by ' '
from have
group by substr(dsname,2,4)
having dsname = max(dsname)
;
quit;
data want ;
set &dslist ;
run;