我想我的问题并不像我想的那样清楚。我将尽最大努力解释我的问题:
我有一张客户和日期的表格。我使用了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 (apr2005,may2005)缺少2个月。
有一个指标告诉我每个客户缺少的月份有多少(Missing_ind)
我需要做的是,为表中的所有客户完成缺少的月份,无论是精确的表,还是向新表插入行。
怎么做呢?
谢谢你帮了我一把
盖尔。
发布于 2013-08-11 21:00:58
这实际上是一个不同的问题,这很容易解决。
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;发布于 2013-08-14 22:00:58
由于您已经确定了两个日期之间丢失的月数,因此可以使用一个简单的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;https://stackoverflow.com/questions/18172054
复制相似问题