2006/1/12, Chuck Cleland <[EMAIL PROTECTED]>:
> 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.

I agree with this point. it 's usefull when one get the spss data file
into R to do something and export that data back to spss data file.

>
> 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
>


--
黄荣贵
Deparment of Sociology
Fudan University

______________________________________________
[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

Reply via email to