[R] SAS and RODBC

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Feb 11 10:25:00 CET 2010


On Thu, 11 Feb 2010, Daniel Nordlund wrote:

> I am using R-2.10.1 binary from CRAN on a WinXP Pro system.  I also use SAS v9.2 on the same box.  I just started using the SAS ODBC driver that comes with version 9 of SAS.  I have been able to set up an ODBC source for SAS datasets using the driver, and then with RODBC I am able to read a sample SAS dataset.
>
>> library(RODBC)
>> ch <- odbcConnect('sasodbc', believeNRows=FALSE)
>> df <- sqlQuery(ch, 'select * from sasodbc.class', as.is=TRUE)
>> df
>      Name Sex Age Height Weight
> 1   Alfred   M  14   69.0  112.5
> 2    Alice   F  13   56.5   84.0
> 3  Barbara   F  13   65.3   98.0
> 4    Carol   F  14   62.8  102.5
> 5    Henry   M  14   63.5  102.5
> 6    James   M  12   57.3   83.0
> 7     Jane   F  12   59.8   84.5
> 8    Janet   F  15   62.5  112.5
> 9  Jeffrey   M  13   62.5   84.0
> 10    John   M  12   59.0   99.5
> 11   Joyce   F  11   51.3   50.5
> 12    Judy   F  14   64.3   90.0
> 13  Louise   F  12   56.3   77.0
> 14    Mary   F  15   66.5  112.0
> 15  Philip   M  16   72.0  150.0
> 16  Robert   M  12   64.8  128.0
> 17  Ronald   M  15   67.0  133.0
> 18  Thomas   M  11   57.5   85.0
> 19 William   M  15   66.5  112.0
>
>> str(df)
> 'data.frame':   19 obs. of  5 variables:
> $ Name  : chr  "Alfred" "Alice" "Barbara" "Carol" ...
> $ Sex   : chr  "M" "F" "F" "F" ...
> $ Age   : num  14 13 13 14 14 12 12 15 13 12 ...
> $ Height: num  69 56.5 65.3 62.8 63.5 57.3 59.8 62.5 62.5 59 ...
> $ Weight: num  112 84 98 102 102 ...
>
>
> However, I am not able to save a dataframe back to a SAS dataset.  When I try to use sqlSave I get the following error.
>
>> sqlSave(ch, df, tablename='sasodbc.class2')
> Error in sqlSave(ch, df, tablename = "sasodbc.class2") : 00000 0
> [RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE sasodbc.class2  ("rownames" varchar(255), "Name" varchar(255), "Sex" varchar(255), "Age" num, "Height" num, "Weight" num)'
>
>
> Can anyone suggest how I might go about tracking down the problem? 
> I don't know much about ODBC in general or what RODBC is doing under 
> the hood, or how the SAS ODBC driver is written, but it would be 
> useful if I could get R to write SAS datasets, and not just read 
> them.

What 'RODBC is doing under the hood' is in that error message: sending 
an SQL query to create a table.  Unfortunately, the SAS ODBC driver is 
not returning a useful error message, and this really becomes a 
question for SAS support.  Maybe that function is not supported, the 
connection is read-only, the SAS dialect requires different quotes 
(although RODBC asked the driver about quoting) ... only someone 
familiar with the ODBC driver will know.

This is really off-topic here: r-sig-db would be more appropriate but 
only marginally so,

> Thanks,
>
> Dan
>
> Daniel Nordlund
> Bothell, WA USA

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



More information about the R-help mailing list