create.case.base.series=function(#
   ds,event.var,t.var,i.var, id.var, x.vars, b.c.ratio,random) #
{#
#
# user supplies...#
#
 # ds         : source dataset#
 # event.var  : event variable (1=event)  #
 # t.var      : event (or censoring) time#
 # i.var      : intervention (tx) variable#
 # id.var     : patient identifier#
 # x.vars     : vector of names of regressor variables#
 # b.c.ratio  : (integer) ratio, size of base series : case series#
 # random     : if 1 , #
#
# program calculates ...#
 #
 n.subjects = length(ds[,t.var]); # no. of subjects#
 B = sum(ds[,t.var]);             # total person-time in base#
 c = sum(ds[,event.var])          # no. of cases (events)#
 b = b.c.ratio * c;               # size of base series  #
 offset = log(B / b);             # offset so intercept = log(ID | x, t = 0 ) #
#
# & returns dataset with b+c rows of person-moments (p.m), x.vars, offset,#
# and an indicator variable y (1 if p.m represents an evemt, 0 otherwise )#
             #
  if (random==1)#
  {#
    p = ds[,t.var]/B;#
    who=sample(n.subjects, b, replace = TRUE, prob = p);#
    b.series=ds[who,] ;#
    b.series=b.series[,c(i.var,id.var,x.vars,t.var)] #
    b.series$y=0;#
    b.series[,t.var] = runif(b)*b.series[,t.var];#
    b.series$o = offset;#
  }       	#
  #
   if (random != 1)#
  {#
    d.t=B/(b+1);#
    p.sum=c(0);#
    for (i in 1:n.subjects){#
    	p.sum = c( p.sum, p.sum[i] + ds[i,t.var] )#
    	}#
    every.d.t = B*(1:b)/(b+1);#
    who=findInterval(every.d.t,p.sum);  #
    #print(who);#
    b.series=ds[who,] ;#
    b.series=b.series[,c(i.var,id.var,x.vars,t.var)]; #
    b.series$y=0;#
    b.series[,t.var] = every.d.t - p.sum[who];#
    b.series$o = offset;#
  }       	#
  #
  c.series=ds[ ds[event.var]==1, ] ;#
  c.series=c.series[,c(i.var,id.var,x.vars,t.var)] ; #
  c.series$y=1;#
  c.series[,t.var] = c.series[,t.var];#
  c.series$o = offset;   #
  c.b.series = rbind(c.series,b.series); #
  return(c.b.series); #
}
