DnR <- function(x, d, w, y=rep(-Inf, length(x)) )
{
# inputs should be from Wdataclean2(), i.e. ordered and weighted.
# y is the truncation times, y do not have to be the same length
# as x, but should be length(y) = sum(w).
allrisk <- rev(cumsum(rev(w)))
posi <- d == 1
uncenx <- x[posi]
uncenw <- w[posi]
uncenR <- allrisk[posi]
if(any(y > -Inf)) {
inde <- function(u, v) { as.numeric(u >= v) }
uuij <- outer(y, uncenx, FUN="inde")
trunca <- as.vector( rowsum( uuij, group= rep(1, length(y))) )
uncenR <- uncenR - trunca
}
list( times = uncenx, n.risk = uncenR, n.event = uncenw )
}