我想我的问题并不像我想的那么清楚。 我会尽力解释我的问题:
我有一张顾客和约会表。 我使用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)
我需要做的是, 完成表中所有客户的缺失月份,无论是确切的表格, 或将行插入新表。
怎么做?
感谢您帮助我,
加。
答案 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;