Thank you very much! write.SPSS works fine. I just wonder, why this very useful function is not part of any package. I have not even found it in the web. For experts it may not be a big deal to write their own export functions, but for newcomers like me it is almost impossible - and at the same time it is essential to us to have good facilities for exchange with our familiar statistical package. I think a lack of exchange tools might be something that scares many people off and keeps them from getting to know R.
Well, just do give a greenhorn ´s perspective. Best regards, Michael -----Ursprüngliche Nachricht----- Von: Chuck Cleland [mailto:[EMAIL PROTECTED] Gesendet: Donnerstag, 12. Januar 2006 01:16 An: Michael Reinecke Cc: R-help@stat.math.ethz.ch Betreff: Re: [R] SPSS and R ? do they like each other? Michael Reinecke wrote: > > Thanks again for your answer! I tried it out. write.foreign produces SPSS > syntax, but unfortunally this syntax tells SPSS to take the names (and not > the labels) in order to produce SPSS variable labels. The former labels get > lost. > > I tried a data frame produced by read.spss and one by spss.get. Here is the > read.spss one (the labels meant to be exported are called "Text 1", ...): > > jjread<- read.spss("test2.sav", use.value.labels=TRUE, > to.data.frame=TRUE) > >>str(jjread) > > `data.frame': 30 obs. of 3 variables: > $ VAR00001: num 101 102 103 104 105 106 107 108 109 110 ... > $ VAR00002: num 6 6 5 6 6 6 6 6 6 6 ... > $ VAR00003: num 0 0 6 7 0 7 0 0 0 8 ... > - attr(*, "variable.labels")= Named chr "Text 1" "Text2" "text 3" > ..- attr(*, "names")= chr "VAR00001" "VAR00002" "VAR00003" > >> datafile<-tempfile() >> codefile<-tempfile() >> write.foreign(jjread,datafile,codefile,package="SPSS") >> file.show(datafile) >> file.show(codefile) > > > > The syntax file I get is: > > DATA LIST FILE= > "C:\DOKUME~1\reinecke\LOKALE~1\Temp\Rtmp15028\file27910" free / VAR00001 > VAR00002 VAR00003 . > > VARIABLE LABELS > VAR00001 "VAR00001" > VAR00002 "VAR00002" > VAR00003 "VAR00003" > . > > EXECUTE. > > > I am working on R 2.2.0. But I think a newer version won ´t fix it either, > will it? Here is a functiong based on modifying foreign:::writeForeignSPSS (by Thomas Lumley) which might work for you: write.SPSS <- function (df, datafile, codefile, varnames = NULL) { adQuote <- function(x){paste("\"", x, "\"", sep = "")} dfn <- lapply(df, function(x) if (is.factor(x)) as.numeric(x) else x) write.table(dfn, file = datafile, row = FALSE, col = FALSE) if(is.null(attributes(df)$variable.labels)) varlabels <- names(df) else varlabels <- attributes(df)$variable.labels if (is.null(varnames)) { varnames <- abbreviate(names(df), 8) if (any(sapply(varnames, nchar) > 8)) stop("I cannot abbreviate the variable names to eight or fewer letters") if (any(varnames != names(df))) warning("some variable names were abbreviated") } cat("DATA LIST FILE=", dQuote(datafile), " free\n", file = codefile) cat("/", varnames, " .\n\n", file = codefile, append = TRUE) cat("VARIABLE LABELS\n", file = codefile, append = TRUE) cat(paste(varnames, adQuote(varlabels), "\n"), ".\n", file = codefile, append = TRUE) factors <- sapply(df, is.factor) if (any(factors)) { cat("\nVALUE LABELS\n", file = codefile, append = TRUE) for (v in which(factors)) { cat("/\n", file = codefile, append = TRUE) cat(varnames[v], " \n", file = codefile, append = TRUE) levs <- levels(df[[v]]) cat(paste(1:length(levs), adQuote(levs), "\n", sep = " "), file = codefile, append = TRUE) } cat(".\n", file = codefile, append = TRUE) } cat("\nEXECUTE.\n", file = codefile, append = TRUE) } -- Chuck Cleland, Ph.D. NDRI, Inc. 71 West 23rd Street, 8th floor New York, NY 10010 tel: (212) 845-4495 (Tu, Th) tel: (732) 452-1424 (M, W, F) fax: (917) 438-0894 ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html