Example 7.10: Get data from R into SAS

[This article was first published on SAS and R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

In our previous entry, we described how to generate a dataset from SAS that could be used for analyses in R. Alternatively, someone primarily using R might want to test the new ”statistical graphics” procedures available starting with SAS 9.2. Here we show how one might create a long data set in R, export it, read it in SAS, and generate a plot similar to that shown in example 7.9.


In R, we use the reshape() function (section 1.5.3) to make the ”long” data set. We make a data frame (section B.4.5) from the data we’ll need in SAS. We check the data, using the order() function (section 1.5.6) to organize the new data frame by subject instead of visit number. Finally, we write out the data set in dBase format (section 1.2.2).

> ds <- read.csv
> attach(ds)
> long <- reshape(ds, idvar="id", 
    v.names="cesdtv", timevar="visit", direction="long")
> attach(long)
> tosas <- data.frame(id, visit, cesdtv)
> head(tosas[order(id, visit),])

     id visit cesdtv
1     1     1      7
471   1     2     NA
941   1     3      8
1411  1     4      5
2     2     1     11
472   2     2     NA

> library(foreign)
> write.dbf(tosas,"c:\book\tosas.dbf")

In SAS, we read in the data from the dBase format file (section 1.1.5), proc sort (section 1.5.6) it in place, and check the data using proc print(section 1.2.4).

proc import datafile="C:booktosas.dbf" 
   out=fromr dbms=dbf;

proc sort data=fromr; by id visit; run;

proc print data=fromr (obs=5); run;

 Obs        id    visit    cesdtv

   1         1        1         7
   2         1        2         .
   3         1        3         8
   4         1        4         5
   5         2        1        11

Finally, we generate the desired plot with proc sgpanel (section 5.1.11), using the where statement (section A.6.3) to select the first 20 subjects.

proc sgpanel data=fromr;
   where id le 20;
   panelby id / rows=4 columns=5;
   scatter x=visit y=cesdtv;

To leave a comment for the author, please follow the link and comment on their blog: SAS and R.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)