使用sql或sas读取最新数据集

时间:2016-05-04 18:30:15

标签: sql sas

我有DYYMMDD格式的数据集

 D160102
 D160128
 D160227
 D160328
 D160430

我如何每月阅读最新数据集。可以说1月份有两个数据集(D160102,D160128),我只想读D160128而不是另一个。怎么样 ??有什么帮助吗?

4 个答案:

答案 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;