如何填写表中的日期“漏洞”?

时间:2013-08-11 12:47:47

标签: sas

我想我的问题并不像我想的那么清楚。 我会尽力解释我的问题:

我有一张顾客和约会表。 我使用LAG函数来检索以前的日期以确定是否 日期中有“漏洞”:

    Customer        Prev_date                       Date                    Missing_ind
    1               01dec2004:00:00:00              01jan2005:00:00:00             0
    1               01jan2005:00:00:00              01feb2005:00:00:00             0
    1               01feb2005:00:00:00              01apr2005:00:00:00             1
    2               01dec2004:00:00:00              01jan2005:00:00:00             0
    2               01jan2005:00:00:00              01feb2005:00:00:00             0
    2               01feb2005:00:00:00              01mar2005:00:00:00             0
    2               01mar2005:00:00:00              01jun2005:00:00:00             2
    .
    .
    .
    .

如您所见,在第3行中,客户1(Mar2005)缺少1个月 在第7行,客户2(2005年5月,2005年5月)缺少2个月。

有一个指示器告诉我每个客户缺少多少个月(Missing_ind)

我需要做的是, 完成表中所有客户的缺失月份,无论是确切的表格, 或将行插入新表。

怎么做?

感谢您帮助我,

加。

2 个答案:

答案 0 :(得分:1)

这实际上是一个不同的问题,这很容易解决。

data have;
input Customer (prev_date date) (:datetime17.);
format prev_date date datetime19.;
datalines; 
    1               01dec2004:00:00:00              01jan2005:00:00:00            
    1               01jan2005:00:00:00              01feb2005:00:00:00            
    1               01feb2005:00:00:00              01apr2005:00:00:00            
    2               01dec2004:00:00:00              01jan2005:00:00:00            
    2               01jan2005:00:00:00              01feb2005:00:00:00            
    2               01feb2005:00:00:00              01mar2005:00:00:00            
    2               01mar2005:00:00:00              01jun2005:00:00:00   
;;;;
run;
data want;
set have;
missing_months = intck('dtMonth',prev_date,date)-1;
run;

答案 1 :(得分:1)

由于您已经确定了两个日期之间缺失月份的数量,因此可以使用简单的do循环和intnx函数来完成解决方案。

data missing_dates (keep=customer missing_date );
 set dates;
 format missing_date datetime17.;
 missing_date = prev_date;
 do i=1 to missing_ind by 1;
  missing_date = intnx('dtmonth',missing_date,1,'b');
  output;
 end;
run;