bobguy 发表于 2012-12-24 07:56 
Here is the program to identify no sale in any consecutive three month from a given product. I left ...
谢谢牛人!我看到论坛里好多sas的技术贴都是你回复的,膜拜!另外昨天我发完贴后又在继续想,下面是写的一个程序,请牛人帮忙看一下:
/******将0807改为200807,方便下面转换成日期形式**********/
data market.beer2;
set market.beer1;
sdate=month+200000;
drop month;
run;
/********将200807转换为日期2008-07形式**********/
data market.beer3;
set market.beer2;
time=mdy(mod(sdate,100),1,int(sdate/100));
format time yymmd.;
drop sdate;
run;
proc summary data=market.beer3 nway;
var time;
class procode;
output out=market.cal min=mintime max=maxtime;
run;
data market.beer4;
merge market.beer3 market.cal;
by procode;
keep procode time mintime _FREQ_;
run;
/*******计算时间差,这里算出的是天数********/
data Tmp1.beer7;
set Tmp1.beer4;
y=time-mintime;
run;
/******需要把算出的天数转换成月份,这里还没想到更好的方法,intck函数应该可以,不知如何实现*********/
data Tmp1.beer8;
set Tmp1.beer7;
interval=int((y+2)/30);
run;
/*******计算同一变量两两观测之间的差值,lag()dif()函数*******/
data Tmp1.beer9 replace;
set Tmp1.beer8;
z=lag(interval);
d=dif(interval);
run;
/******筛选出两两观测销售记录缺失之间不超过三个月的产品*******/
data Tmp1.new1 Tmp1.new2 replace;
set Tmp1.beer9;
if d >= 4 then output Tmp1.new1;
else output Tmp1.new2;
run;
data Tmp1.result replace;
merge Tmp1.new2 (in=a) Tmp1.new1 (in=b);
by procode;
if a=1 and b=0;
run;
想请问牛人的是,intck函数在这里应该怎么使?因为我想计算2008-09和2008-12之间月份的数,我写了几个都说语法错误,最后无奈,用了int函数。。。算是变相生成了结果吧。