Michael Reinecke wrote: > 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. > ...
The tool for exporting to SPSS *is* available in the foreign package thanks to Thomas Lumley. I just made a *small modification* to use the variable.labels attribute of a data frame if it's available and the names of the data frame if that attribute is not available. Maybe Thomas will consider making a change to foreign:::writeForeignSPSS along those lines. Chuck Cleland > -----Ursprüngliche Nachricht----- > Von: Chuck Cleland [mailto:[EMAIL PROTECTED] > Gesendet: Donnerstag, 12. Januar 2006 01:16 > An: Michael Reinecke > Cc: [email protected] > 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 > > ______________________________________________ > [email protected] mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > -- 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 ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
