[R] SAS to R - if you don't have a SAS license
Frank E Harrell Jr
f.harrell at vanderbilt.edu
Fri Dec 28 18:21:55 CET 2007
Wensui Liu wrote:
> while I move data between SAS and R all the time, personally I don't
> think your recommendation is very practical. Instead, I feel SAS
> transport file is much better than csv.
>
> Plus, the sas dataset created on unix can't be opened by sas viewer on
> windows. It is even undoable if the dataset is large.
That's surprising. I hoped that a "SAS Viewer" would read all formats
of SAS binary files.
There is another definite limitation to SAS Viewer: SAS invested so
little of their billions of $ into it that it only has 2 delimiters (tab
and comma) and doesn't even check if character strings contain the
delimiter so as to escape those occurrences. So the Viewer often
produces invalid csv files.
Frank
>
> Just my $0.02.
>
>
> On Dec 27, 2007 6:33 PM, Gyula Gulyas <gygulyas at yahoo.ca> wrote:
>> Hi all,
>>
>> if you do not have a SAS license but want to convert
>> native SAS data files, the solution below will work.
>>
>> # read SAS data without SAS
>>
>> # 1. Download free SAS System Viewer from either of
>> the sites below:
>> #
>> http://www.sas.com/apps/demosdownloads/setupcat.jsp?cat=SAS+System+Viewer
>> (requires registration)
>> #
>> http://www.umass.edu/statdata/software/downloads/SASViewer/index.html
>> # 2. Open SAS data in the SAS System Viewer
>> # 3. View-Formatted sets the data in formatted view
>> # 4. Save As File...csv file - this is your SAS data
>> file
>> # 5. View-Variables (now showing the variable names
>> and formats)
>> # 6. Save As File...csv file - this is your SAS
>> variable definition file
>>
>> # run code below
>>
>> wrkdir<-getwd() # save working directory to reset
>> later
>>
>> # Select the SAS data file...
>> sas.data<-read.table(file.choose(),header=T, sep=",",
>> na.strings=".")
>>
>> # Select SAS variable definition file...
>> sas.def<-read.csv(file.choose())
>>
>> # str(sas.def)
>> # sas.def$SASFORMAT[sas.def$Type=="Char"]<-"character"
>> # sas.def$SASFORMAT[sas.def$Type=="Num"]<-"numeric"
>>
>> sas.def$SASFORMAT[substr(sas.def$Format,1,4)=="DATE"]<-"date"
>>
>> sas.def<-sas.def[,length(names(sas.def))] # pick last
>> column
>>
>> tmp<-which(sas.def=="date")
>>
>> sas.data[,tmp] <-
>> as.data.frame(strptime(sas.data[,tmp],
>> "%d%b%Y:%H:%M:%S"))
>>
>> str(sas.data)
>> print(head(sas.data))
>>
>> setwd(wrkdir) # reset working directory
>>
>> rm(wrkdir,tmp,sas.def)
>>
>> # the end
>>
More information about the R-help
mailing list