From ripley at stats.ox.ac.uk  Sat Jan  3 18:33:37 2009
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Sat, 3 Jan 2009 17:33:37 +0000 (GMT)
Subject: [Rd] (PR#13423) bug report: writeForeignSAS in package "foreign"
In-Reply-To: <20090102141509.90D9C282EFC1@mail.pubhealth.ku.dk>
References: <20090102141509.90D9C282EFC1@mail.pubhealth.ku.dk>
Message-ID: <alpine.LFD.2.00.0901031732040.28137@auk.stats.ox.ac.uk>

And did you want to report a bug?

On Fri, 2 Jan 2009, ken_kleinman at hms.harvard.edu wrote:

> function (df, datafile, codefile, dataname = "rdata", validvarname = c("V7",
>    "V6"))
> {
>    factors <- sapply(df, is.factor)
>    strings <- sapply(df, is.character)
>    dates <- sapply(df, FUN = function(x) inherits(x, "Date") ||
>        inherits(x, "dates") || inherits(x, "date"))
>    xdates <- sapply(df, FUN = function(x) inherits(x, "dates") ||
>        inherits(x, "date"))
>    datetimes <- sapply(df, FUN = function(x) inherits(x, "POSIXt"))
>    varlabels <- names(df)
>    varnames <- make.SAS.names(names(df), validvarname = validvarname)
>    if (any(varnames != varlabels))
>        message("Some variable names were abbreviated or otherwise altered.")
>    dfn <- df
>    if (any(factors))
>        dfn[factors] <- lapply(dfn[factors], as.numeric)write
>    if (any(datetimes))
>        dfn[datetimes] <- lapply(dfn[datetimes], function(x) format(x,
>            "%d%b%Y %H:%M:%S"))
>    if (any(xdates))
>        dfn[xdates] <- lapply(dfn[xdates], function(x) as.Date(as.POSIXct(x)))
>    write.table(dfn, file = datafile, row = FALSE, col = FALSE,
>        sep = ",", quote = TRUE, na = "")
>    lrecl <- max(sapply(readLines(datafile), nchar)) + 4L
>    cat("* Written by R;\n", file = codefile)
>    cat("* ", deparse(sys.call(-2L))[1L], ";\n\n", file = codefile,
>        append = TRUE)
>    if (any(factors)) {
>        cat("PROC FORMAT;\n", file = codefile, append = TRUE)
>        fmtnames <- make.SAS.formats(varnames[factors])
>        fmt.values <- lapply(df[, factors, drop = FALSE], levels)
>        names(fmt.values) <- fmtnames
>        for (f in fmtnames) {
>            cat("value", f, "\n", file = codefile, append = TRUE)
>            values <- fmt.values[[f]]
>            for (i in 1L:length(values)) {
>                cat("    ", i, "=", adQuote(values[i]), "\n",
>                  file = codefile, append = TRUE)
>            }
>            cat(";\n\n", file = codefile, append = TRUE)
>        }
>    }
>    cat("DATA ", dataname, ";\n", file = codefile, append = TRUE)
>    if (any(strings)) {
>        cat("LENGTH", file = codefile, append = TRUE)
>        lengths <- sapply(df[, strings, drop = FALSE], FUN =
> function(x) max(nchar(x)))
>        names(lengths) <- varnames[strings]
>        for (v in varnames[strings]) cat("\n", v, "$", lengths[v],
>            file = codefile, append = TRUE)
>        cat("\n;\n\n", file = codefile, append = TRUE)
>    }
>    if (any(dates)) {
>        cat("INFORMAT", file = codefile, append = TRUE)
>        for (v in varnames[dates]) cat("\n", v, file = codefile,
>            append = TRUE)
>        cat("\n YYMMDD10.\n;\n\n", file = codefile, append = TRUE)
>    }
>    if (any(datetimes)) {
>        cat("INFORMAT", file = codefile, append = TRUE)
>        for (v in varnames[datetimes]) cat("\n", v, file = codefile,
>            append = TRUE)
>        cat("\n DATETIME18.\n;\n\n", file = codefile, append = TRUE)
>    }
>    cat("INFILE ", adQuote(datafile), "\n     DSD", "\n     LRECL=",
>        lrecl, ";\n", file = codefile, append = TRUE)
>    cat("INPUT", file = codefile, append = TRUE)
>    for (v in 1L:ncol(df)) cat("\n", varnames[v], file = codefile,
>        append = TRUE)
>    if (strings[v])
>        cat(" $ ", file = codefile, append = TRUE)
>    cat("\n;\n", file = codefile, append = TRUE)
>    for (v in 1L:ncol(df)) if (varnames[v] != names(varnames)[v])
>        cat("LABEL ", varnames[v], "=", adQuote(varlabels[v]),
>            ";\n", file = codefile, append = TRUE)
>    if (any(factors))
>        for (f in 1L:length(fmtnames)) cat("FORMAT", names(fmtnames)[f],
>            paste(fmtnames[f], ".", sep = ""), ";\n", file = codefile,
>            append = TRUE)
>    if (any(dates))
>        for (v in varnames[dates]) cat("FORMAT", v, "yymmdd10.;\n",
>            file = codefile, append = TRUE)
>    if (any(datetimes))
>        for (v in varnames[datetimes]) cat("FORMAT", v, "datetime18.;\n",
>            file = codefile, append = TRUE)
>    cat("RUN;\n", file = codefile, append = TRUE)
> }
>
> -- 
> ___________________________
> Ken Kleinman, ScD
> Associate Professor, Department of Ambulatory Care and Prevention
> Harvard Medical School and Harvard Pilgrim Health Care
> 133 Brookline Ave., 6th Floor
> Boston, MA 02215
> p: 617 509 9935
> f: 617 859 8112
> https://dacppages.pbwiki.com/Ken%20Kleinman
>
>
> "The only useful function of a statistician is to make predictions,
> and thus to provide a basis for action." - W.E. Deming
>
> "Cleesh Inbox"  - Me
>
> This email is only for the intended recipient and may contain
> information that is privileged, confidential or exempt from disclosure
> under applicable Federal or State law. Any review, retransmission,
> dissemination or other use of  protected health information by other
> than the intended recipient is prohibited. If you received this email
> in error, please contact the sender and delete the material.
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] (PR#13423) bug report: writeForeignSAS in package "foreign"
Prof Brian Ripley