将日期间隔转换为各个日期的行

时间:2017-03-28 18:39:13

标签: sas

在SAS中,我有一个过去的start_date列和一个end_date为今天的列。我有一个价格和一个ID。 ID是截然不同的。

我需要垂直旋转日期以获得唯一的日期,价格和ID。

谢谢。
START:

开始最终价格ID

3/26/2017 3/28/2017 3.25 12345678

END:

ID价格日期

12345678 3.25 3/26/2017
12345678 3.25 3/27/2017
12345678 3.25 3/28/2017

1 个答案:

答案 0 :(得分:1)

好吧,我解释这个问题。 (没有冒犯的意思。)

您有日期间隔,并希望在保留ID和价格的同时为它们之间的每个日期设置行。

首先我们生成一些数据。

data Begin;
    input start :DATE9. end :DATE9. price ID;
    datalines;
    '26MAR17'd '28MAR17'd 3.25 12345678
    '1JAN17'd '4JAN17'd 5.6 876543221
    ;
run;

我们总是希望把它们排除在外。

proc sort data= begin; by start; run;

data wanted(keep=ID price date); 
    set begin;
    by start; /*Each start date begins the following loop*/
        do while (start <= end); 
            date=start; /*This is just that we get the right name out from output*/
            output; 
            start= start+1;
        end;
run;

请确保结束&gt;开始,否则您将遇到无限循环。 (或者添加对代码的比较。)